0

我一直在网上做很多研究,据我了解,我认为我的查询没问题这就是为什么我需要你的帮助来指出我做错了什么。

我的查询应该做什么

我的查询应该从两个仓库获取我们的库存水平

问题是

如果产品不在两个仓库中,则查询不会给出任何结果。

好的,首先我有两个仓库库存水平数据库。看起来像那样。

数据库

-warehouse1
-warehouse2

桌子

-product

-id
-SKU
-qty

所以我的查询是

SELECT
    warehouse1.product.id as 1_id,
    warehouse2.product.id as 2_id ,
    warehouse1.product.SKU,
    warehouse1.product.qty as 1_qty,
    warehouse2.product.qty as 2_qty
FROM `warehouse1`.`product`
    LEFT JOIN `warehouse2`.`product`
    ON
        (`warehouse1`.`product`.`SKU` = `warehouse2`.`product`.`SKU`)
    WHERE
        warehouse1.product.SKU = '$sku'
        OR
        warehouse2.product.SKU = '$sku'
ORDER BY
    (1_qty + 2_qty) DESC

如果我where这样制定条款

WHERE warehouse1.product.SKU = '$sku'

它正在工作,但我无法从两个仓库获取库存。

如果我想从两个仓库接收库存水平,即使在此数据库中没有我要求的产品,我应该怎么做。

谢谢

4

3 回答 3

0

尝试一个FULL OUTER JOIN. 您正在使用LEFT JOIN. 这要求数据库在LEFT连接一侧(即仓库 1)获取与 WHERE 子句匹配的所有记录,以及来自仓库 2(连接右侧)的任何可能匹配的记录。如果 SKU 仅存在于仓库 2 中,则您看不到它。

切换到 FULL OUTER JOIN 会强制数据库从连接的两侧获取所有匹配记录,而不管匹配记录存在于哪一侧。

于 2013-09-26T18:48:30.127 回答
0

你也可以通过工会来做到这一点

(SELECT
  warehouse1.product.id as 1_id,
  warehouse1.product.SKU,
  warehouse1.product.qty as 1_qty
FROM `warehouse1`.`product`
WHERE
    warehouse1.product.SKU = '$sku' )
  union
(SELECT
  warehouse2.product.id as 2_id ,
  warehouse2.product.SKU,
  warehouse2.product.qty as 2_qty
 FROM `warehouse2`.`product`
WHERE warehouse2.product.SKU = '$sku' )
于 2013-09-26T19:02:10.570 回答
-1

将您的 OR 组合在 () (... OR ...) 中:

SELECT
    warehouse1.product.id as 1_id,
    warehouse2.product.id as 2_id ,
    warehouse1.product.SKU,
    warehouse1.product.qty as 1_qty,
    warehouse2.product.qty as 2_qty
FROM `warehouse1`.`product`
    LEFT JOIN `warehouse2`.`product`
    ON
        (`warehouse1`.`product`.`SKU` = `warehouse2`.`product`.`SKU`)
    WHERE (warehouse1.product.SKU = '$sku'
        OR
        warehouse2.product.SKU = '$sku')
ORDER BY
    (1_qty + 2_qty) DESC
于 2013-09-26T18:46:02.813 回答