加入表格时出现问题

时间:2011-09-15 15:16:43

标签: sql sql-server sql-server-2005 tsql sql-server-2008

我有三个名为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

但我不知道我是否做得对。有谁可以帮助我?

3 个答案:

答案 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