如何获得联接数据的单独行

如何获得联接数据的单独行

假设我有一些实体的名称在表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/

10-11 01:39