我有两个表,我只想显示第一个表中的子 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
请问有什么想法吗?
我有两个表,我只想显示第一个表中的子 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
请问有什么想法吗?
试试这个
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)
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
如果您不需要第二个表子 ID,为什么要使用 UNION
SELECT Child_ID FROM firstTable
这足以得到你想要的。
UNION
将关键字更改为EXCEPT
(关系差异又名减号),例如
SELECT Child_ID FROM firstTable
EXCEPT
SELECT Child_ID FROM SecondTable WHERE User_ID = @UserID