我目前正在尝试从表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)
如果我选择Select而不是删除,我会得到我要查找的子集,但是当我执行删除时,我得到一个错误,表示表A中存在语法错误。我会使用NOT IN声明,但多列是主键的一部分,我只是看不出它是如何工作的。任何帮助将不胜感激。
答案 0 :(得分:7)
在sql server中,当使用not exists时,需要为要连接的表设置别名,并在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)
答案 1 :(得分: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只是一个占位符,任何常量/单个非空列都可以工作。
答案 2 :(得分:1)
尝试这样的事情:
delete from Table_A
where (section, subsection, code) not in (select section,
subsection,
code
from Table_B)