2015-08-12 3 views
0

Я бегу этот запрос на PHPMyAdmin и это дает синтаксическую ошибку,MYSQL запрос дает ошибка синтаксиса

Delete from users_roles as ur where ur.uid NOT IN (select u.uid from users as u) 

ERROR: 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 'as ur where ur.uid NOT IN (select u.uid from users as u)' at line 1 

и когда я бегу этот запрос

select ur.uid from users_roles as ur where ur.uid NOT IN (select u.uid from users as u) 

это дает мне результат.

+0

Добавить сообщение об ошибке, пожалуйста. – Jens

ответ

0

Попытка удаления псевдонима:

Delete from users_roles where uid NOT IN (select uid from users) 

Смотрите демо в SQL Fiddle.

EDIT:

Когда вы находитесь в необходимости использовать псевдоним для удаления запроса (если вы используете присоединился запрос), вы можете сделать:

Delete ur from users_roles as ur where ur.uid NOT IN (select u.uid from users as u) 
+0

Спасибо, Raging Bull, он работает для меня, может у вас объяснить, в чем проблема с псевдонимом. –

+0

@AkashJain: См. Редактирование в моем ответе. Также см. [** этот вопрос **] (http://stackoverflow.com/questions/11005209/why-cant-i-use-an-alias-in-a-delete-statement) –

1

Вы не можете использовать псевдоним в что форма заявления DELETE. Оно должно быть:

DELETE FROM users_roles 
WHERE uid NOT IN (SELECT uid FROM users) 

Чтобы использовать псевдоним, вы должны использовать другой синтаксис:

DELETE ur FROM users_roles AS ur 
WHERE ur.uid NOT IN (SELECT uid FROM users) 

Этот синтаксис обычно используется только тогда, когда вы выполняете JOIN в DELETE заявлении, так что вам нужно обратиться к конкретным таблицам и столбцам в JOIN. Это не нужно, когда вы просто ссылаетесь на одну таблицу. Например, вы могли бы переписать запрос как:

DELETE ur 
FROM users_roles AS ur 
LEFT JOIN users AS u ON ur.uid = u.uid 
WHERE u.uid IS NULL 

Смотрите MySQL documentation. Первая форма DELETE допускает только tbl_name, вторая форма позволяет table_references, а последний, где могут быть определены псевдонимы.

0

дон использовать т псевдоним для удаления попробуйте это Удалить из users_roles, как где users_roles.uid NOT IN (выберите u.uid от пользователей, как и)

Смежные вопросы