MS SQL删除所有不相等的记录

时间:2016-08-30 09:51:30

标签: sql sql-server tsql sql-server-2014 sql-delete

我的问题是: 我有2个表格(例如T1T2),它们都有字段Q_ID。表格T1Q_ID列中有一些记录不是马赫T2。我的目标是将它们与关系联系起来,因此我想删除T2中的所有行,其中Q_ID不是来自Q_ID的{​​{1}}。我试过像这样使用内连接,但是这个脚本只是删除了所有记录。

T1

我正在使用MS SQL server 2014

3 个答案:

答案 0 :(得分:2)

也许是这样的:

CREATE TABLE T1 (ID INT, SomeValue VARCHAR(100));
CREATE TABLE T2 (ID INT, SomeValue VARCHAR(100));
INSERT INTO T1 VALUES
(1,'Row 1'),(2,'Row 2'),(3,'Row 3'),(4,'Row 4');
INSERT INTO T2 VALUES
(1,'Row 1'),(4,'Row 4');

DELETE FROM T1
WHERE T1.ID NOT IN(SELECT T2.ID FROM T2);

SELECT * FROM T1;
SELECT * FROM T2;

答案 1 :(得分:1)

您也可以采用以下两种方式:

DELETE dst 
FROM HRM_MVC_DEV_Test.dbo.ProjectWorkers AS dst 
LEFT JOIN HRM_MVC_DEV_Test.dbo.Project AS src ON src.ProjectId = dst.ProjectId
WHERE src.ProjectId IS NULL

- 第二次

DELETE dst 
FROM HRM_MVC_DEV_Test.dbo.ProjectWorkers AS dst 
WHERE NOT EXISTS(
    SELECT src.ProjectId FROM HRM_MVC_DEV_Test.dbo.Project AS src WHERE src.ProjectId = dst.ProjectId
)

答案 2 :(得分:0)

DELETE
FROM HRM_MVC_DEV_Test.dbo.ProjectWorkers
WHERE NOT EXISTS (SELECT 1 FROM HRM_MVC_DEV_Test.dbo.Project WHERE Project.ProjectId = ProjectWorkers.ProjectId)

你可以像上面那样使用NOT EXISTS。来自documentation

  

NOT EXISTS与EXISTS相反。如果子查询没有返回任何行,则满足NOT EXISTS中的WHERE子句。