我有一个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?,但我不认为它会提出相同的问题。
有什么想法吗?
答案 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'