繁体   English   中英

MYSQL查询给出语法错误

[英]MYSQL query gives syntax error

我在phpmyadmin上运行此查询,它给出了语法错误,

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)

它给了我结果。

您不能以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)

这句法通常只用于当你执行JOINDELETE语句,所以你需要参考具体的表和列的JOIN 当您只引用一个表时不需要它。 例如,您可以将查询重写为:

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

参见MySQL 文档 第一种形式的DELETE仅允许tbl_name ,第二种形式允许table_references ,后者是可以定义别名的位置。

尝试删除别名:

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

请参阅SQL Fiddle中的演示。

编辑:

当需要使用别名进行删除查询时(使用联接查询时),可以执行以下操作:

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

不要使用别名进行删除,请尝试使用从users_roles中删除,方法是users_roles.uid不输入(从u中选择u.uid)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM