我有2个MySQL表IM_Transfer
和IM_INV
。我定期运行以下查询:
SELECT
`IM_Transfer`.`sku`,
`IM_Transfer`.`vendor_sku`,
`IM_Transfer`.`Description`,
`IM_Transfer`.`Receiver`,
`IM_INV`.`LOC_ID`,
`IM_INV`.`QTY_ON_HND`
FROM
`IM_Transfer`
LEFT JOIN
`IM_INV`
ON
`IM_Transfer`.`sku` = `IM_INV`.`ITEM_NO`
WHERE `LOC_ID` = "AF"
OR `LOC_ID` = "LO"
OR `LOC_ID` = "S"
OR `LOC_ID` = "SL"
ORDER BY
`IM_Transfer`.`sku`,
`IM_INV`.`LOC_ID`
ASC
大多数情况下,IM_Transfer
中的大部分行都与IM_Transfer
。sku
和IM_INV
。ITEM_NO
匹配,{39}} ; t在最后两列中返回null
个值。
我刚刚使用IM_Transfer
中的单行运行此查询,并且IM_INV
中没有任何匹配的数据。如何更新查询以仅在null
和LOC_ID
列中返回仅包含QTY_ON_HND
的行?
提前致谢
答案 0 :(得分:0)
当外连接表中有一行时,where子句仅计算为true。在where子句中引用外连接表中的列通常会使连接成为内连接。
我认为您想要的查询是:
SELECT
`IM_Transfer`.`sku`,
`IM_Transfer`.`vendor_sku`,
`IM_Transfer`.`Description`,
`IM_Transfer`.`Receiver`,
`IM_INV`.`LOC_ID`,
`IM_INV`.`QTY_ON_HND`
FROM
`IM_Transfer`
LEFT JOIN
`IM_INV`
ON
`IM_Transfer`.`sku` = `IM_INV`.`ITEM_NO`
AND ( `LOC_ID` = "AF"
OR `LOC_ID` = "LO"
OR `LOC_ID` = "S"
OR `LOC_ID` = "SL" )
ORDER BY
`IM_Transfer`.`sku`,
`IM_INV`.`LOC_ID`
ASC
注意:
LOC_ID IN ("AF","LO","S","SL")
感谢@SeanLange指出我正确的方向。