sql - 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 |
我试过,在连接上只使用一个条件并且它可以工作,但是它不适用于我拥有的三个条件。
我可能做错了什么。
对此的任何指针都提前表示赞赏。
谢谢
解决方案
看起来您的 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
推荐阅读
- mysql - MYSQL 从所有行完全符合给定条件的行集中返回“CombinationID”
- php - 使用自定义文件名在 WordPress 中上传文件
- json - 使用 Codable 协议解析包含日期作为键的 Stock API
- java - ActiveMQ 一队列多消费者
- javascript - 用 Enzyme 测试点击监听器
- c# - 更正在 RabbitMQ 中捕获交换的内容
- docker - Docker - 源代码 .profile
- html - 当元素被推到下一行时保持间距
- php - 在 Laravel 的 Eloquent 上查找以多对多关系共享标签的文章的正确方法
- kubernetes - Kubernetes 作业未完成