当前位置:  开发笔记 > 后端 > 正文

如何删除表中具有另一个表中相应记录的所有记录

如何解决《如何删除表中具有另一个表中相应记录的所有记录》经验,为你挑选了1个好方法。

我有两个表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我得到一个"不唯一的table.alias:a"消息



1> lmop..:

我认为这应该有效(无论如何都适用于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';

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有