2012-05-07 25 views
21

Próbowałem to z MySQL:DELETE FROM `table` AS` alias` ... WHERE `alias``column` ... dlaczego błąd składniowy?

DELETE FROM `contact_hostcommands_relation` AS `ContactHostCommand` WHERE (`ContactHostCommand`.`chr_id` = 999999) LIMIT 1 

i uzyskać w ten sposób:

#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 'WHERE (`ContactHostCommand`.`chr_id` = 999999) LIMIT 1' at line 1 

Uwaga: To zapytanie jest generowany automatycznie i warunki są oparte na aliasów tabel.

Dlaczego pojawia się ten błąd?

Czy istnieje sposób użycia aliasów tabeli w klauzuli where?

Czy jest to specyficzne dla MySQL?

+1

Wypróbuj to samo bez "AS". Po prostu go usuń. – sp00m

+0

@ sp00m Próbowałem, ale nie działa. Dzięki za pomysł. –

Odpowiedz

27

Można użyć SQL tak:

DELETE FROM ContactHostCommand 
USING `contact_hostcommands_relation` AS ContactHostCommand 
WHERE (ContactHostCommand.`chr_id` = 999999) 
LIMIT 1 
+0

Nice. Czy to jest specyficzne dla MySQL? –

+0

Naprawdę nie wiem, ponieważ potrzebowałem tego tylko w MySQL. Domyślam się, że jest to obejście MySQL, ponieważ nie obsługuje DELETE z aliasu. – Sarunas

+2

dla MSSQL: DELETE ContactHostCommand Z 'contact_hostcommands_relation' AS ContactHostCommand – Matus

5

nie można używać AS w DELETE klauzuli MySQL:

DELETE FROM `contact_hostcommands_relation` WHERE (`chr_id` = 999999) LIMIT 1 
+0

To działa. Ale potrzebowałem aliasów tabel do określania warunków dla konstruktora zapytań. Teraz używam specjalnej zmiennej, która przechowuje bieżącą nazwę modelu. Nazwa modelu jest inna niż nazwa tabeli. Jest to kwestia jednorodności. –

+3

Właściwie to może. Zobacz zaakceptowaną odpowiedź. –

22

Co @Matus i @CeesTimmerman powiedział o MSSQL, pracuje w MySQL 5.1 .73 też:

delete <alias> from <table> <alias> where <alias>.<field>...