假设我有一些实体的名称在表name
中,键name_id
。这些名称可以在同一个表中使用外键“alternative forms”。问题是,实体只引用主名称。因此,如果我想要一些实体的主名称和替代名称,我可以:
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
但实际上,连接到名字的路径更复杂,我希望避免这样做两次。有没有办法在一个查询中做到这一点?
最佳答案
下面的查询应该会给出您期望的答案:
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/