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

MS SQL Delete all unequal record

我的问题是: 我有 2 个表(例如 T1T2)它们都有字段 Q_ID。 Table T1Q_ID 列中有一些记录不符合 T2。我的目标是将它们与关系联系起来,所以我想删除 T2 中的所有行,其中 Q_ID 不会从 T1 中匹配 Q_ID。我试过像这样使用内部连接,但这个脚本只是删除了所有记录。

    DELETE dst FROM HRM_MVC_DEV_Test.dbo.ProjectWorkers as dst 
    INNER JOIN HRM_MVC_DEV_Test.dbo.Project as src on dst.ProjectId<>src.ProjectId

我正在使用 MS SQL 服务器 2014

可能是这样的:

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;

您也可以通过以下任一方式进行:

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
)
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 like the above. From the documentation:

NOT EXISTS works the opposite of EXISTS. The WHERE clause in NOT EXISTS is satisfied if no rows are returned by the subquery.