我有两个表 A 和 B。我想删除表 A 中在以下查询中返回的所有记录:
SELECT A.*
FROM A , B
WHERE A.id = B.a_id AND
b.date < '2008-10-10'
我试过:
DELETE A
WHERE id in (
SELECT a_id
FROM B
WHERE date < '2008-10-10')
但这仅在内部选择实际返回一个值时有效(如果结果集为空则无效)
注意:这必须适用于SQLServer 和 MySQL
编辑:更多信息
上述删除在 SQLServer 上 100% 有效
在 MySQL 上运行它时,我收到一条“错误的 SQL 语法”消息,指出 SELECT 的开头是问题所在。如果我用 (1,2) 替换内部选择,那么它就可以工作。
@Kibbee 你是对的,内部选择是否返回行实际上没有区别。
@Fred 我收到“not unique table.alias: a”消息
最佳答案
我认为这应该可行(无论如何都适用于 MySQL):
DELETE a.* FROM A a JOIN B b ON b.id = a.id WHERE b.date < '2008-10-10';
没有别名:
DELETE A.* FROM A JOIN B ON B.id = A.id WHERE B.date < '2008-10-10';
关于sql - 如何删除一个表中所有在另一个表中有相应记录的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/272045/