如何解决如何在SQL中使用Grandparent-Parent-Child列联接表?
我想加入两个表hierarchy
和item
:
hierarchy
|------------------|------------------|-------------|--------------|------------|--------------|
| grandparent_id | grandparent_name | parent_id | parent_name | child_id | child_name |
|------------------|------------------|-------------|--------------|------------|--------------|
| 100 | Make | 101 | Model | 102 | CPU |
|------------------|------------------|-------------|--------------|------------|--------------|
item
|-----------|-------------|
| item_id | item_name |
|-----------|-------------|
| 100 | Dell |
| 101 | XPS |
| 102 | i5-9300H |
|-----------|-------------|
所需的输出:
|-----------|-------------|-------------|
| item_id | item_name | hierarchy |
|-----------|-------------|-------------|
| 100 | Dell | Make |
| 101 | XPS | Model |
| 102 | i5-9300H | CPU |
|-----------|-------------|-------------|
执行此查询的最有效方法是什么?
解决方法
您可以取消透视层次结构的列,然后加入:
select i.item_id,i.item_name,h.model
from item i
inner join (
select grand_parent_id item_id,grand_parent_name model from hierarchy
union all select parent_id,parent_name from hierarchy
union all select child_id,child_name from hierarchy
) h on h.item_id = i.item_id
如果层次结构中可能缺少项目,则可以使用left join
代替inner join
。
您可以使用联接:
select i.*,coalesce(h1.grand_parent_name,h2.parent_name,h3.child_name) as hierarchy
from items i left join
hierarchy h1
on h1.grand_parent_id = i.item_id left join
hierarchy h2
on h2.parent_id = i.item_id left join
hierarchy h3
on h3.child_id = i.item_id;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。