🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych
Article #194261

Re: MySQL i dziwactwo

#194261
From: Ronald Kuczek
Date: Mon, 02 Feb 2015 19:38
54 lines
3012 bytes
W dniu 31.01.2015 o 17:02, R.e.m.e.K pisze:
> Witam
>
> Spotkalem sie z dziwnym problemem, nie uzywam MySQLa zbyt czesto, ale problem jest tak
> niecodzienny, ze postanowilem zapytac.
> Chce skasowac rekordy z jednej tabeli wg kilku warunkow. Zapytanie, ktore te warunki
> testuje wyglada tak:
>
> SELECT * FROM AUTORZY A
> WHERE A.ILOSCPUBLIKACJI = 0
> AND A.ILOSCKOMENTARZY = 0
> AND (DATEDIFF(CURRENT_DATE,A.DATADODANIA) > 30)
> AND (DATEDIFF(CURRENT_DATE,A.OSTATNIELOGOWANIE) > 30)
> AND A.KILKASLOWOAUTORZE like '%<a href="http%'
>
> gdy zmieniam selecta na delete:
>
> DELETE FROM AUTORZY A
> WHERE A.ILOSCPUBLIKACJI = 0
> AND A.ILOSCKOMENTARZY = 0
> AND (DATEDIFF(CURRENT_DATE,A.DATADODANIA) > 30)
> AND (DATEDIFF(CURRENT_DATE,A.OSTATNIELOGOWANIE) > 30)
> AND A.KILKASLOWOAUTORZE like '%<a href="http%'
>
> to serwer rzuca mi w twarz:
>
> #1064 - You have an error in your SQL syntax; check the manual that corresponds to your
> MySQL server version for the right syntax to use near 'A WHERE A.ILOSCPUBLIKACJI = 0 AND
> A.ILOSCKOMENTARZY = 0 AND (DATEDIFF(CURRENT' at line 1
>
> Polecany manual nic mi nie powiedzial.
> Co robie zle?
>

Zabrakło odwołania do aliasu po "DELETE" a więc poprawnie powinieneś użyć:
DELETE A FROM AUTORZY A WHERE ....
albo jeśli nie używasz aliasu
DELETE FROM AUTORZY WHERE ...

To, co wydaje Ci się dziwactwem jest bardzo praktyczną cechą MySQL-a, 
która umożliwia w jednym zapytaniu wykonanie delete tudzież update na 
wielu tabelach. W tym momencie przywołanie aliasu ma sens, bo wyobraź 
sobie, że Twoje zapytanie ma postać:

DELETE  FROM AUTORZY A INNER JOIN KSIAZKI K ON K.AUTORID=A.ID WHERE ....

MySQL oczekuje, że określisz dokładnie, czy chcesz usunąć krotki z 
tabeli A, z tabeli K tudzież z obu tabel jednocześnie. Domyślnie 
zostawienie pustego delete generuje w tej sytuacji błąd, który dostałeś 
(i chyba lepsze to, niż usunięcie wszystkich krotek ze wszystkich tabel 
przywołanych w zapytaniu).  To samo dotyczy update.

Pozdrawiam
Rony
Technical Details
Message-ID: <54cfd22a$0$2190$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <54ccfcb4$0$2206$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Date: Mon, 02 Feb 2015 20:38:18 +0100
From: Ronald Kuczek <kuczek@kuczek.pl>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0
MIME-Version: 1.0
Newsgroups: pl.comp.bazy-danych
Subject: Re: MySQL i dziwactwo
References: <54ccfcb4$0$2206$65785112@news.neostrada.pl>
In-Reply-To: <54ccfcb4$0$2206$65785112@news.neostrada.pl>
Lines: 57
Message-ID: <54cfd22a$0$2190$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 80.53.131.214
X-Trace: 1422905898 unt-rea-a-01.news.neostrada.pl 2190 80.53.131.214:50671
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit