0

私はオンラインで多くの調査を行ってきましたが、私の理解では、私のクエリは問題ないと思います。そのため、私が間違っていることを指摘するためにあなたの助けが必要です.

私のクエリがすべきこと

私のクエリは、両方の倉庫から在庫レベルを取得する必要があります

問題は

製品が両方の倉庫にない場合、クエリは結果を与えません。

まず、倉庫の在庫レベルのデータベースが 2 つあります。そのように見えます。

データベース

-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ます。これには、結合側 (warehouse1) の WHERE 句に一致するすべてのレコードとLEFT、warehouse2 (結合の右側) から一致する可能性のあるすべてのレコードを DB がフェッチする必要があります。SKU が Warehouse2 にのみ存在する場合、それは表示されません。

FULL OUTER JOIN に切り替えると、DB は、一致するレコードが存在する側に関係なく、結合の両側からすべての一致するレコードをフェッチするように強制されます。

于 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 に答える