Article View: pl.comp.bazy-danych
Article #194261Re: MySQL i dziwactwo
From: Ronald Kuczek
Date: Mon, 02 Feb 2015 19:38
Date: Mon, 02 Feb 2015 19:38
54 lines
3012 bytes
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-mailReferences:
<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