SQL select语句条件连接

时间:2015-05-27 16:25:04

标签: sql select

我遇到了一个我不知道如何解决的场景。

这是一个示例表:

items Table
---------------------------------------
id | name  | bool | linked_item_id_fk |
---------------------------------------
1  | test1 | f    | null              |
---------------------------------------
2  | test2 | t    | null              |
---------------------------------------
3  | test3 | t    | 1                 |
---------------------------------------
4  | test4 | f    | 5                 |
---------------------------------------
5  | test5 | f    | null              |
---------------------------------------

当bool为true时,我正在尝试从表中选择数据。我还想要包含链接的项目。这是我正在使用的一个例子

SELECT * FROM items WHERE bool = true

这将返回:

  

test2和test3

但我想得到的是:

  

test1,test2和test3

在这种情况下,即使test4有一个链接项,因为它是false,我们不检索test5。但是我想检索test1,因为test3链接到它,即使它是假的。

我可以使用一个select语句吗?

对不起,我无法想出这个问题的创意标题;)

3 个答案:

答案 0 :(得分:0)

它会为您提供准确的记录

SELECT * FROM items 
WHERE bool = true
 OR ID  IN 
  (Select linked_item_id_fk 
      From items  where bool = true)

答案 1 :(得分:0)

试试这个:

SELECT * FROM Table 
WHERE bool = 't'

UNION ALL

SELECT t2.* FROM Table  t1
JOIN Table t2 ON t1.linked_item_id_fk = t2.id
WHERE t1.bool = 't'

答案 2 :(得分:0)

您可以使用左连接:

select t1.*
from items t1
left join items t2
on t1.id = t2.linked_item_id_fk
where t1.bool = true
or (t2.bool is true and t2.id is not null);