我的问题是:
我有2个表格(例如T1
和T2
),它们都有字段Q_ID
。表格T1
在Q_ID
列中有一些记录不是马赫T2
。我的目标是将它们与关系联系起来,因此我想删除T2
中的所有行,其中Q_ID
不是来自Q_ID
的{{1}}。我试过像这样使用内连接,但是这个脚本只是删除了所有记录。
T1
我正在使用MS SQL server 2014
答案 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子句。