Ron*_*fin 4 mysql sql sql-server
我有两个表A和B.我想删除在以下查询中返回的表A中的所有记录:
SELECT A.*
FROM A , B
WHERE A.id = B.a_id AND
b.date < '2008-10-10'
Run Code Online (Sandbox Code Playgroud)
我试过了:
DELETE A
WHERE id in (
SELECT a_id
FROM B
WHERE date < '2008-10-10')
Run Code Online (Sandbox Code Playgroud)
但这只有在内部选择实际返回一个值时才有效(如果结果集为空则不行)
注意:这必须适用于SQLServer和MySQL
编辑:更多信息
以上删除在SQLServer上100%有效
在MySQL上运行时,我得到一个"SQL语法错误"消息,指出SELECT的开始是问题.如果我用(1,2)替换内部选择,那么它的工作原理.
@Kibbee你是对的,如果内部选择返回行,它实际上没有区别.
@Fred我得到一个"不唯一的table.alias:a"消息
我认为这应该有效(无论如何都适用于MySQL):
DELETE a.* FROM A a JOIN B b ON b.id = a.id WHERE b.date < '2008-10-10';
Run Code Online (Sandbox Code Playgroud)
没有别名:
DELETE A.* FROM A JOIN B ON B.id = A.id WHERE B.date < '2008-10-10';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |