gpt4 book ai didi

sql - 如何为连接数据获取单独的行?

转载 作者:行者123 更新时间:2023-11-29 12:50:03 25 4
gpt4 key购买 nike

假设我的实体在表 name 中有名称,键为 name_id。这些名称可以有“替代形式”,在同一个表中,带有外键 primary_name_id。问题是,实体只引用主要名称。因此,如果我想要某些实体的主要名称和备用名称,我可以这样做:

SELECT e.entity_id, n.name_id
FROM entity e
JOIN entity_to_name e2n ON e2n.entity_id = e.entity_id
JOIN name n ON e2n.name_id = n.name_id

UNION

SELECT e.entity_id, na.name_id
FROM entity e
JOIN entity_to_name e2n ON e2n.entity_id = e.entity_id
JOIN name n ON e2n.name_id = n.name_id
JOIN name na ON na.primary_name_id = n.name_id

编辑:表格示例和预期结果:

-------------------
entity_id | name_id
-------------------
entity1 | n1
entity2 | n2
entity3 | n3
-------------------

-----------------------------------
name_id | primary_name_id | name
-----------------------------------
n1 | NULL | Entity 1
n2 | NULL | Entity 2
n3 | NULL | Entity 3
n4 | n1 | Entity Uno
n5 | n2 | Entity Duo
n6 | n2 | Entity Zwei
------------------------------------

And as a result I want

---------------------
entity_id | name_id
---------------------
entity1 | n1
entity1 | n4
entity2 | n2
entity2 | n5
entity2 | n6
entity3 | n3

但实际上,JOIN-path to names 更复杂,我想避免做两次。有没有办法在一个查询中执行此操作?

最佳答案

下面的查询应该会给你预期的答案:

SELECT  n.name_id
, e.entity_Id
FROM name n
LEFT JOIN entity e
ON coalesce(n.primary_name_id, n.name_id) = e.name_id

关于sql - 如何为连接数据获取单独的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56443686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com