mysql仅在查看子行时返回父行

时间:2011-03-01 21:10:37

标签: mysql

我有一个包含列的父表:

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。

2 个答案:

答案 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;