我在这里总共使用 4 个表:
产品表: 产品 ID、产品描述
数据1 产品_id、位置_id、数据1
数据2 产品_id、位置_id、数据2
数据3 产品 ID、位置 ID、数据3
我遇到的问题不是每个数据表中都包含每个product_id 或location_id。我的查询成功地为第一个数据表正确提取数据,但在 data1 中不存在 Product_id 或 location_id 但在 data2 中存在的情况下则不行。我知道这是由于返回到 data1 的 on 条件造成的,但我不知道如何获取 location_nbr 在那里。我确实有另一个表列出了所有位置编号,但这些位置编号与项目表的任何位置都没有关联,因此我无法加入该表。
select
item1.*
,coalesce(data1.location_id, data2.location_id, data3.location_id) as location_id
,data1.data1
,data2.data2
,data3.data3
from item1
LEFT OUTER JOIN data1 AS data1
ON data1.product_id = item1.ksn_id
LEFT OUTER JOIN data2 AS data2
ON data2.product_id = item1.ksn_id
and data2.location_nbr = data1.location_nbr
LEFT OUTER JOIN data3 AS data3
ON data3.product_id = item1.ksn_id
and data3.locn_nbr = data1.location_nbr
最佳答案
在不查看表结构的情况下,很难推荐准确的解决方案,但是,根据描述,您应该研究完整外部连接,这将允许您包含在任何地方使用的所有product_id 和 location_id。
关于具有多个条件的 SQL 多重左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22159205/