gpt4 book ai didi

mysql - LEFT JOIN 的 SQL 查询不返回结果

转载 作者:行者123 更新时间:2023-11-29 18:17:08 24 4
gpt4 key购买 nike

我有 2 个 MySQL 表 IM_TransferIM_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.skuIM_INV 匹配。 ITEM_NO 以及最后 2 列中未返回 null 值的那些。

我刚刚使用 IM_Transfer 中的一行运行了此查询,它在 IM_INV 中没有任何匹配的数据。如何更新查询以仍然返回 LOC_IDQTY_ON_HND 列中仅包含 null 的行?

提前致谢

最佳答案

仅当外部连接表中有行时,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

注释:

  1. ASC 是默认排序顺序,因此不需要指定。
  2. 将 LOC_ID 过滤器表示为 LOC_ID IN ("AF","LO","S","SL") 会更简单

感谢@SeanLange 为我指明了正确的方向。

关于mysql - LEFT JOIN 的 SQL 查询不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46918953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com