首页 > 解决方案 > MS SQL Server LEFT JOIN 未产生预期结果

问题描述

我正在尝试在两个表上进行 LEFT JOIN,但我不确定为什么 LEFT JOIN 没有按预期工作。

select * from table1
经销商 ID org_id product_id 邮政编码 数量
2001年 1 1 1001 2
2001年 1 2 1004 5
2001年 1 2 1001 8
2001年 1 1 1009 8
2002年 1 3 1001 8
2002年 1 1 1009 9
select * from table2
org_id product_id 邮政编码 客户ID
1 1 1001 23
1 2 1004 34
1 2 1001 22
2 1 9001 23
1 3 1001 45

我正在使用的查询是,

SELECT a.dealer_id, 
    a.org_id, 
    a.product_id, 
    a.zipcode, 
    b.zipcode AS mapped_code, 
    a.qty
FROM table1 a
LEFT JOIN table2 b ON a.org_id = b.org_id 
                   AND a.product_id = b.product_id 
                   AND a.zipcode = b.zipcode

我期待的结果是,

经销商 ID org_id product_id 邮政编码 客户ID 映射代码 数量
2001年 1 1 1001 23 1001 2
2001年 1 2 1004 34 1001 5
2001年 1 2 1001 22 1001 8
2001年 1 1 1009 无效的 无效的 8
2002年 1 3 1001 45 1001 8
2002年 1 1 1009 无效的 无效的 9

但是,我得到以下结果,我什至尝试使用 LEFT OUTER 和它相同,

经销商 ID org_id product_id 邮政编码 客户ID 映射代码 数量
2001年 1 1 1001 23 1001 2
2001年 1 2 1004 34 1001 5
2001年 1 2 1001 22 1001 8
2002年 1 3 1001 45 1001 8

我试过,在连接上只使用一个条件并且它可以工作,但是它不适用于我拥有的三个条件。

我可能做错了什么。

对此的任何指针都提前表示赞赏。

谢谢

标签: sqlsql-server

解决方案


看起来您的 SQL 格式不正确...

DECLARE @table1 TABLE
(
    dealer_id VARCHAR(10)
    , org_id INT 
    , product_id INT
    , zipcode VARCHAR(10)
    , qty INT
)

INSERT INTO @table1 VALUES(2001,1,1,1001,2)
INSERT INTO @table1 VALUES(2001,1,2,1004,5)
INSERT INTO @table1 VALUES(2001,1,2,1001,8)
INSERT INTO @table1 VALUES(2001,1,1,1009,8)
INSERT INTO @table1 VALUES(2002,1,3,1001,8)
INSERT INTO @table1 VALUES(2002,1,1,1009,9)

DECLARE @table2 TABLE
(
    org_id INT 
    , product_id INT
    , zipcode VARCHAR(10)
    , customer_id INT
)

INSERT INTO @table2 VALUES(1,1,1001,23)
INSERT INTO @table2 VALUES(1,2,1004,34)
INSERT INTO @table2 VALUES(1,2,1001,22)
INSERT INTO @table2 VALUES(2,1,9001,23)
INSERT INTO @table2 VALUES(1,3,1001,45)

SELECT a.dealer_id, 
    a.org_id, 
    a.product_id, 
    b.customer_id,
    a.zipcode, 
    b.zipcode AS mapped_code, 
    a.qty
FROM @table1 a
LEFT JOIN @table2 b ON a.org_id = b.org_id 
                   AND a.product_id = b.product_id 
                   AND a.zipcode = b.zipcode

推荐阅读