MS SQL 删除所有不相等的记录
MS SQL Delete all unequal record
我的问题是:
我有 2 个表(例如 T1
和 T2
)它们都有字段 Q_ID
。 Table T1
在 Q_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.
我的问题是:
我有 2 个表(例如 T1
和 T2
)它们都有字段 Q_ID
。 Table T1
在 Q_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.