7

我目前正在尝试从表 A 中删除表 B 中未使​​用相应记录的情况。表 A 具有 Section、SubSection、Code、Text 作为字段,其中前三个是主键。表 B 有 ID、Section、SubSection、Code 作为字段,其中四个都是主键。还有更多列,但它们与这个问题无关......只是想在我被问到为什么所有列都是表 B 的主键的一部分之前指出这一点。表 A 几乎是所有可能数据的存储库可以分配给一个实体,表 B 是他们被分配的地方。我想从表 A 中删除表 B 中未使​​用的所有记录。我尝试了以下操作但没有成功:

DELETE FROM Table A 
WHERE NOT EXISTS (SELECT * from Table B 
WHERE A.section = B.section
AND A.subsection = B.subsection
AND A.code = b.code)

如果我执行选择而不是删除,我会得到我正在寻找的子集,但是当我执行删除时,我会收到一个错误,指出表 A 存在语法错误。我会使用 NOT IN 语句,但是由于多列是主键的一部分,我只是不知道它是如何工作的。任何帮助将不胜感激。

4

3 回答 3

14

在sql server中,当使用notexists时,需要为要连接的表设置别名,并在delete语句中指定要删除行的表。

DELETE a FROM Table_A a 
WHERE NOT EXISTS (SELECT * from Table_B b 
WHERE a.section = b.section
AND a.subsection = b.subsection
AND a.code = b.code)
于 2016-02-14T04:04:11.657 回答
5

请试试 :

DELETE FROM Table A 
WHERE NOT EXISTS (SELECT 1 from Table B 
WHERE A.section = B.section
AND A.subsection = B.subsection
AND A.code = b.code)

1 只是一个占位符,任何常量/单个非空列都可以使用。

于 2013-11-06T03:03:16.390 回答
2

尝试这样的事情:

delete from Table_A
    where (section, subsection, code) not in (select section, 
                                                     subsection, 
                                                     code 
                                                from Table_B)
于 2013-11-06T05:42:22.290 回答