根据另一行的标识符和值选择行

时间:2015-04-01 22:02:14

标签: mysql sql

我有一个mySQL数据集,如下所示:

ID    PARENT_ID    VALUE

1     100          This comment should be approved
2     100          Y
3     101          Another approved comment
4     101          Y
5     102          This comment is not approved
6     102          N

我需要构造一个SQL查询,以选择具有匹配的parent_id和对应的Y值的行(但忽略具有单个字母的行作为结果中的值),以产生:

ID    PARENT_ID    VALUE

1     100          This comment should be approved
3     101          Another approved comment

我的想法是使用GROUP BY来组合列,但我不知道如何根据Y / ​​N值进行选择。

这里可能有一个解决方案How do I select a row based on a priority value in another row?,但我不认为它会提出相同的问题。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

虽然您可以将其表示为聚合,但您可以使用exists

来表达
select d.*
from dataset d
where d.value <> 'Y' and
      exists (select 1
              from dataset d2
              where d2.parent_id = d.parent_id and d2.value = 'Y'
             );

此版本可能更有效。

答案 1 :(得分:1)

首先,如果可以,请更改表架构。您的表在同一字段中存储两种数据(是的没有标记和注释)。这打破了常态,稍后会困扰你。

但如果不是你的桌子要改变,你需要自己加入。试试这个。

   SELECT a.id, a.parent_Id, a.value 
   FROM table a inner join table b
   ON a.parent_id =b.parent_id
    WHERE a.value <> 'Y' and b.value ='Y'