使用单个JOIN Select语句替换UNION的替代/替代

时间:2017-07-03 05:20:36

标签: sql sql-server select join union

我有一个名为posts的表格,我希望retrieve符合records中满足以下条件的所有select statement并返回single table -

select ID from posts where UserID= 23487 and postlevel <> 1
select ID from posts where ParentID in (select ID from posts where UserID= 23487 and postlevel <> 1)

现在,通过使用下面的UNION运算符,我可以返回一个表 -

select ID from posts where UserID= 23487 and postlevel <> 1
UNION 
select ID from posts where ParentID in (select ID from posts where UserID= 23487 and postlevel <> 1)

输出

enter image description here

JOIN查询下方尝试但未获得预期结果并返回NULL -

select ID from posts cs
LEFT JOIN posts cs1 ON cs.ID = cs1.ID
where cs.UserID = 23487 and cs.PostLevel <>1 and cs.ParentID = cs1.ID

预期

我想使用JOIN或使用单个SELECT而不是UNION来获取记录,以获得所需的输出,如上所示。

3 个答案:

答案 0 :(得分:4)

您是否尝试在单个WHERE子句中将两个条件进行OR运算:

select ID
from posts
where
    (UserID = 23487 and postlevel <> 1) or
    (ParentID in (select ID from cs_posts where UserID= 23487 and postlevel <> 1))

答案 1 :(得分:1)

你可以试试这个

select ID
from posts
where
    (UserID = 23487 and postlevel <> 1) or
    (EXISTS (select 1 from cs_posts where UserID= 23487 and postlevel <> 1 and ID = ParentID) )

答案 2 :(得分:0)

没有必要结合或存在或存在....试试这个:

select distinct F1.id from post F1 inner join
 posts f2 on f2.UserID= 23487 and f2.postlevel <> 1 AND 
(F1.id=f2.id or F1.parentid=f2.id)

如果您想保留重复值,请删除不同的