我有三个名为SData,Schdata和Fordata的表,数据如下:
SData: Schdata Fordata
Name Pro_ID Pro_ID Sch_ID Str_ID Sch_ID
ACase 258 258 438 6 654
Boece 369 125 125 7 438
Dremd 781 369 985 12 548
Wep 469 469 754 8 284
PQData
Pro_ID Sch_ID Type
258 438 rep
358 678 pro
现在我正在尝试从SData获取ProdID存在于Schdata中的名称,我不希望Schdata的Pro_ID具有来自Fordata的Shc_ID,因此我的输出应为:
Name Sch_ID
Boece 985
Wep 754
所以我写了一个像这样的查询:
Select a.Name,s.Sch_ID
From SData a
Inner Join Schdata s
on a.Pro_ID = s.Pro_ID
Inner Join Fordata f
on f.Sch_ID <> s.Sch_ID
但我不知道我是否做得对。有谁可以帮助我?
答案 0 :(得分:2)
[见下面Martin的评论]正确的做法是:
Select a.Name,s.Sch_ID
From SData a
Inner Join Schdata s
on a.Pro_ID = s.Pro_ID
WHERE NOT EXISTS (SELECT 1 FROM Fordata f
WHERE f.Sch_ID = s.Sch_ID)
答案 1 :(得分:2)
你快到了那里:
Select a.Name,s.Sch_ID
From SData a
Inner Join Schdata s
on a.Pro_ID = s.Pro_ID
where not exists (select f.Sch_ID from Fordata f
where f.Sch_ID = s.Sch_ID )
答案 2 :(得分:0)
使用OUTER / INNER JOIN的一种解决方案:
DECLARE @SData TABLE
(
Name VARCHAR(25) NOT NULL
,Pro_ID INT NOT NULL
);
INSERT @SData
VALUES ('ACase',258),('Boece',369),('Dremd',781),('Wep',469);
DECLARE @Schdata TABLE
(
Pro_ID INT NOT NULL
,Sch_ID INT NOT NULL
);
INSERT @Schdata
VALUES (258,438), (125,125), (369,985), (469,754);
DECLARE @Fordata TABLE
(
Str_ID INT NOT NULL
,Sch_ID INT NOT NULL
);
INSERT @Fordata
VALUES (6,654), (7,438), (12,548), (8,284);
SELECT a.Name, b.Sch_ID
FROM @Schdata b
LEFT OUTER JOIN @Fordata c ON b.Sch_ID = c.Sch_ID
INNER JOIN @SData a ON a.Pro_ID = b.Pro_ID
WHERE c.Sch_ID IS NULL