我遇到了一个我不知道如何解决的场景。
这是一个示例表:
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语句吗?
对不起,我无法想出这个问题的创意标题;)
答案 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);