我确实认为该主题非常令人困惑,所以让我通过这个小例子来说明我的问题:
假设我有一个Entity
表,字段为id, feature, group_id
。 group_id是另一个表的引用键
id | feature | group_id
-----------------------------
1 | true | group_1
2 | false | group_1
3 | false | group_2
4 | true | null
你们可以建议如何使用feature = true
查询所有记录,以及如何将同一组中的所有记录添加到该记录中,而与功能标志无关。
因此,在上表中,结果应为1
(由于true
)和2
(因为它与通过我们的谓词的1
具有相同的组)
也许重要的是要知道,在真实的查询中,feature = true
条件是数百行/// subselects语句(但现在,也许我们只关注上面提到的简单示例)。
更新:我添加了ID为4
的行,其中group_id
为空
答案 0 :(得分:2)
您可以使用IN子句:
SELECT * FROM Entity
WHERE group_id IN (SELECT group_id FROM entity WHERE feature = true)
如果MySQL的group_id可以为null,则可以使用:
SELECT * FROM Entity
WHERE IFNULL(group_id, 0) IN (SELECT IFNULL(group_id, 0) FROM entity WHERE feature = true)
(因此它将NULL转换为0,这意味着它仍然可以与in子句一起使用。但是,请确保group_id永远不会为0或仍然可能失败。您可以改用-1。)
答案 1 :(得分:0)
您可以使用EXISTS
:
SELECT * FROM Entity E1
WHERE EXISTS (SELECT 1
FROM Entity E2
WHERE E1.group_id = E2.group_id
AND E2.feature = 'true'
)
答案 2 :(得分:0)
这将起作用:
select * from Entity where group_id in (select group_id from Entity where feature =
'true');