使用两列从不在另一个表中的表中删除

eri*_*pey 2 sql-server-2008 sql-server

我试图弄清楚我正在尝试完成的这个删除语句。我了解如何从不在列中的表中删除(到 table2 的子查询)

我有两个多列的表,每个表有两列组成主键。我想你必须加入吗?我想要以下内容:

Delete From tbl1 left join tbl2
on tbl1.PK1 = tbl2.PK1 and tbl1.PK2 = tbl2.PK2
where tbl1_PK1 Not IN(
Select Distinct tbl2.PK1, tbl2.PK2 where DateStr >= GetDate()-365)
Run Code Online (Sandbox Code Playgroud)

我正在尝试从 tbl1 中删除行。这看起来接近正确吗?

编辑添加:

tbl1 PK1, PK2, Col1

tbl2 PK1、PK2、DateStr

Delete From tbl1 left join tbl2
on tbl1.PK1 = tbl2.PK1 and tbl1.PK2 = tbl2.PK2
where tbl1.PK1,tbl1.PK2 Not IN(
Select Distinct tbl2.PK1, tbl2.PK2 where DateStr >= GetDate()-365)
Run Code Online (Sandbox Code Playgroud)

运行 sqlfiddle 后剩下的应该是:

tbl1
('T', '222','asdf')

tbl2
('T', '222','9/26/2014')
Run Code Online (Sandbox Code Playgroud)

db2*_*db2 6

我怀疑你在追求这样的事情:

DELETE FROM tbl1
FROM tbl1
    LEFT OUTER JOIN tbl2
        ON tbl1.PK1 = tbl2.PK1
        AND tbl1.PK2 = tbl2.PK2
        AND tbl2.DateStr >= GETDATE() - 365
WHERE tbl2.PK1 IS NULL
    AND tbl2.PK2 IS NULL
Run Code Online (Sandbox Code Playgroud)

是的,您有两个FROM带有多表DELETE语句的子句。这本质上只是一个反连接变成了删除。