Sql左连接2列

时间:2017-03-30 13:54:12

标签: sql-server join

我有左连接问题我有2个表。表A:

Itemid InventlocationID
10001    200
10001    301
10001    302

和表B

ItemId InventLocationID ItemOption
10001    200               A
10001    301               B

我想得到以下结果

Itemid InventlocationID ItemOption
10001    200                A
10001    301                B
10001    302               null

我使用左连接:

SELECT a.itemid,a.inventlocationid,b.ItemOption
FROM  a
left  join b
on (a.ItemID = b.ITEMID and a.InventLocationid = b.INVENTLOCATIONID)

我得到的结果是:

Itemid InventlocationID Itemoption
10001    200                A
10001    301                B

任何想法如何才能达到我想要的效果? 编辑:表a和b有更多记录

2 个答案:

答案 0 :(得分:2)

您的查询工作正常。 (检查你的数据)

create table tablea (Itemid int,  InventlocationID int);
insert into tablea values
(10001,    200),
(10001,    301),
(10001,    302);

create table tableb (ItemId int, InventLocationID int, ItemOption char(1));
insert into tableb values
(10001,    200,               'A'),
(10001,    301,               'B');
GO
5 rows affected
select    a.ItemId, a.InventlocationID, b.ItemOPtion
from      tableA a
left join tableB b
on        a.itemId = b.ItemId
and       a.InventlocationID = b.InventlocationID
GO
ItemId | InventlocationID | ItemOPtion
-----: | ---------------: | :---------
 10001 |              200 | A         
 10001 |              301 | B         
 10001 |              302 | null      

dbfiddle here

答案 1 :(得分:1)

当您有一个引用LEFT JOIN中的列的WHERE子句时,通常会发生这种情况。它们的关键点是仅使用第一个表中的列 - 而不是LEFT / OUTER连接的列。

如果需要,您仍然可以使用ans ISNULL()或OR(col == null)。

(给你答案而不是评论)