用sql连接2个表

Adj*_*jit 1 sql sql-server

我试图基于左表加入这两个表并匹配行值.右表不一定具有ITEMNUM左表中的所有s.并不是每个人VNDITNUM都会ITEMNUM在左手表中有一个.

LEFT TABLE (559 rows)
--Filtered based on column IVCOGSIX = 137
SELECT 
    ITEMNMBR
    FROM dbo.IV00101
    WHERE IVCOGSIX = 137
+---------+
| ITEMNUM |
+---------+
| Item 1  |
| Item 2  |
| Item 3  |
| Item 4  |
+---------+

RIGHT TABLE (553 rows)
--Filtered based on column VENDORID = 90505EP
SELECT 
    ITEMNMBR,
    VNDITNUM
    FROM dbo.IV00103
    WHERE VENDORID = '90505EP'
+---------+-------------+
| ITEMNUM |  VNDITNUM   |
+---------+-------------+
| Item 1  | VendorNum 1 |
| Item 2  | VendorNum 2 |
| Item 4  | VendorNum 4 |
| Item X  | VendorNum 5 |
+---------+-------------+
Run Code Online (Sandbox Code Playgroud)

我想要获得的输出是 -

JOINED TABLE (559 rows)
+---------+-------------+
| ITEMNUM |  VNDITNUM   |
+---------+-------------+
| Item 1  | VendorNum 1 |
| Item 2  | VendorNum 2 |
| Item 3  | NULL        |
| Item 4  | VendorNum 4 |
+---------+-------------+
Run Code Online (Sandbox Code Playgroud)

但是,我的查询只给了我548行,而且我不一定确定它会遗漏哪些行.

这是我目前的查询 -

SELECT 
    cogs.ITEMNMBR,
    vin.VNDITNUM
    FROM METRO.dbo.IV00101 cogs
    LEFT JOIN METRO.dbo.IV00103 vin
        on vin.ITEMNMBR = cogs.ITEMNMBR
    WHERE
        cogs.IVCOGSIX = 137
        AND vin.VENDORID = '90505EP'
Run Code Online (Sandbox Code Playgroud)

如何连接这两个表来获取左表的559行以及右表中的任何匹配项?

Sea*_*nge 7

您的连接谓词vin.VENDORID ='90505EP'已有效地将您的左连接转换为内连接.

试试这个.

SELECT 
    cogs.ITEMNMBR,
    vin.VNDITNUM
    FROM METRO.dbo.IV00101 cogs
    LEFT JOIN METRO.dbo.IV00103 vin
        on vin.ITEMNMBR = cogs.ITEMNMBR
        AND vin.VENDORID = '90505EP'
    WHERE
        cogs.IVCOGSIX = 137
Run Code Online (Sandbox Code Playgroud)