2015-12-18 40 views
1

我有以下SQL查询:可以在SQL删除查询中使用别名吗?

DELETE FROM table_b b WHERE NOT EXISTS (SELECT * FROM table_a a WHERE a.some_id = b.some_id) 

,并正在以下错误:

[Err] 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 'b WHERE NOT EXISTS(SELECT * FROM table_a a WHERE a.some_id = b.some_id)' at line 1

这似乎表明,别名不能与SQL delete语句中使用

回答

3

如果我正确理解您的查询和你想删除不在表格从B表中的所有记录。一个更清洁的方式来写它可能是

DELETE FROM table_b WHERE id NOT IN (SELECT id FROM table_a) 
+0

我喜欢这种方法,因为它避免使用相关的子查询。 https://en.wikipedia.org/wiki/Correlated_subquery –

+0

关于Saharsh写的是什么,这是不是有错误,因为DELETE和FROM之间缺少别名b? (你现在可以完全删除别名,或混合在Saharsh的解决方案中) –

+0

是的你的权利我已经更新并删除别名,认为它使整体更清洁。 –

3

(?)是的,您可以在DELETE查询中使用别名。只需在DELETE关键字后面使用该别名即可。它指定从哪个表中删除记录。

试试这个:

DELETE b 
FROM table_b b 
WHERE NOT EXISTS (SELECT * FROM table_a a WHERE a.some_id = b.some_id)