在我的数据库中,我有3个单独的数据库表来存储地址信息。数据库表告诉地址源。请不要要求我重做数据库设计,因为它真的不由我决定;另一个小组负责。
总之,我使用case-when语句尝试将来自所有3个源的单个位置的地址结果合并到一个列表中(就像是从一张table上拉出来的一样)。
SELECT
loc.ID,
CASE
WHEN addr1.ID IS NOT NULL THEN addr1.ADDRESS
WHEN addr2.ID IS NOT NULL THEN addr2.ADDRESS
WHEN addr3.ID IS NOT NULL THEN addr3.ADDRESS
END as LOC_ADDRESS
FROM LOCATION loc
LEFT JOIN ADDRESS_1 addr1 ON loc.ID = addr1.LOCATION_ID
LEFT JOIN ADDRESS_2 addr2 ON loc.ID = addr2.LOCATION_ID
LEFT JOIN ADDRESS_3 addr3 ON loc.ID = addr3.LOCATION_ID;
我使用左连接是因为一个位置在任何/所有这些源中都有一个地址是可选的。e、 g.1位置可能有一个地址(或多个),而另一个位置可能根本没有任何地址。
我所期望的是,如果一个位置在源1和源3中有一个地址,那么这两个地址都会被返回。然而,似乎只有第一个条件在返回时才有效。
如何返回所有有效条件?
基于注解编辑:我希望它返回匹配的地址列表。e、 g.addr1有效,addr3有效,则应与第1行的loc.id,addr1.address和第2行的loc.id,addr3.address相似。等。
2条答案
按热度按时间gg58donl1#
因为你想要所有的3个地址,如果存在的话
concat
功能可以帮助你zfciruhq2#
根据op的评论,你需要
Inner Join
与各种地址表分开使用UNION ALL
.请尝试以下操作: