0

我有两个表,我只想显示第一个表中的子 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

4 回答 4

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)
于 2012-04-09T09:42:08.133 回答
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
于 2012-04-09T17:06:55.283 回答
0

如果您不需要第二个表子 ID,为什么要使用 UNION

SELECT Child_ID FROM firstTable

这足以得到你想要的。

于 2012-04-09T09:42:03.923 回答
0

UNION将关键字更改为EXCEPT(关系差异又名减号),例如

SELECT Child_ID FROM firstTable
EXCEPT
SELECT Child_ID FROM SecondTable WHERE User_ID = @UserID
于 2012-04-10T09:27:40.583 回答