如何解决如何进行不重复父值的联接
我正在尝试制作不重复父值的SQL。
查询:
select
p.name as parent_name,c.name as children_name
from
parent p left outer join children c using(parent_id);
结果是:
PARENT_NAME | CHILDREN_NAME
Parent 1 | Children 1
Parent 1 | Children 2
Parent 1 | Children 3
Parent 1 | Children 4
Parent 2 | Children 1
Parent 2 | Children 2
Parent 2 | Children 3
Parent 2 | Children 4
但是,我的期望是(就像向下钻取一样):
PARENT_NAME | CHILDREN_NAME
Parent 1 | Children 1
<NULL> | Children 2
<NULL> | Children 3
<NULL> | Children 4
Parent 2 | Children 1
<NULL> | Children 2
<NULL> | Children 3
<NULL> | Children 4
带有示例的SQLFiddle是:http://sqlfiddle.com/#!7/2e8f4/1
解决方法
您可以使用row_number()
和case
表达式:
select
case when row_number() over(partition by p.parent_id order by c.id) = 1 then p.name end as parent_name,c.name as children_name
from parent p
left outer join children c using(parent_id)
order by p.parent_id,c.id
如果您的SQLite版本不支持窗口函数,则可以选择一种相关子查询:
select
case when not exists (select 1 from children c1 where c1.parent_id = c.parent_id and c1.id < c.id) then p.name end as parent_name,c.id
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。