UNION在sql语句中

时间:2012-04-09 09:38:24

标签: sql sql-server stored-procedures

我有两个表,我想只显示第一个表中的子ID,而不是第二个表中的子ID。但它总是给我所有的ID,甚至是第二个表中的ID。这是存储过程;

ALTER PROC [dbo].[GetAllChildren]

@UserID int

AS

SELECT Child_ID FROM firstTable
UNION
SELECT Child_ID FROM SecondTable WHERE User_ID = @UserID

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

尝试这个

ALTER PROC [dbo].[GetAllChildren]
@UserID int
AS
SELECT Child_ID 
FROM firstTable 
WHERE Child_ID NOT IN
      (SELECT Child_ID FROM SecondTable WHERE User_ID = @UserID)

答案 1 :(得分:0)

如果您不需要第二个表子ID

,为什么使用UNION?
SELECT Child_ID FROM firstTable

这足以得到你想要的东西。

答案 2 :(得分:0)

SELECT DISTINCT ft.Child_ID
FROM firstTable ft
LEFT JOIN secondTable st
    on ft.Child_ID = st.Child_ID
WHERE st.Child_ID is null

答案 3 :(得分:0)

UNION关键字更改为EXCEPT(关系差异a.k.a.减去),例如

SELECT Child_ID FROM firstTable
EXCEPT
SELECT Child_ID FROM SecondTable WHERE User_ID = @UserID