具有多个条件的 SQL 多重左连接

标签 sql join teradata

我在这里总共使用 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/

相关文章:

procedure - 如何在 Teradata 中提取存储过程主体

java - 准备语句编译时间

java - sql where 条件中的修剪值

MySQL查询 - 获取未购买单个产品ID所有部分的客户

mysql - 一行有 2 个 ID,另一行有名字和姓氏。如何从其他表接收名字

LINQ 加入顶部 1

ms-access-2010 - 将 MS ACCESS 数据库表导入 Teradata

mysql - 如何创建一个使用整个其他外部表的表?

sql - 具有相同 ID 的多个值的数据库

mysql - 在 MySQL 中连接两个查询以将一个查询的结果与另一个查询的结果映射