我试图基于左表加入这两个表并匹配行值.右表不一定具有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行以及右表中的任何匹配项?
您的连接谓词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)