我有一个包含列的父表:
id, valid
带有列的子表:
parent_id, code, value
我想找到所有将“valid”设置为1的父行或者其中一个子行(带有特定代码)的值设置为1.例如:
SELECT parent.id FROM parent,child where valid = 1 OR
(child.code = 55 AND child.value = 1) and parent.id = child.parent_id;
但是,在上面,在valid = 1的情况下,返回N行,每个孩子一行。这是有道理的,因为OR部分不起作用,所以我为每个子行返回一行。
因为我只是在寻找id,所以我可以做不同的(parent.id);但有没有更好的方法来做这类事情?
THX。
答案 0 :(得分:1)
SELECT parent.id
FROM parent
WHERE valid = 1
OR EXISTS (
SELECT 0
FROM child
WHERE child.value = 1
AND child.parent_id = parent.id
)
SELECT 0部分无关紧要。 EXISTS仅关注子查询是否返回任何行。
你也可以......
SELECT parent.id
FROM parent
WHERE valid = 1
OR parent.id IN (
SELECT child.parent_id
FROM child
WHERE child.value = 1
)
答案 1 :(得分:0)
您可以按关键字使用组,按parent.id
分组SELECT parent.id FROM parent,child where valid = 1 OR
(child.code = 55 AND child.value = 1) and parent.id = child.parent_id GROUP BY parent.id;