2017-10-24 19 views
0

私は2つのMySQLテーブルIM_TransferIM_INVを持っています。私は定期的に次のクエリを実行します。ほとんどの時間 LEFT JOINのSQLクエリは結果を返しません

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_INVITEM_NOと、最後の2列に nullの値が返されないものがあります。

IM_Transferの単一の行でこのクエリを実行しましたが、一致するデータはIM_INVにありません。 nullの行をLOC_IDQTY_ON_HND列に返すようにクエリを更新するにはどうすればよいですか?外側の結合されたテーブル内の行がある場合句のみ真と評価され、予め

+0

タグ付けするときは注意が必要です。 mysql <> SQLサーバ。 –

+5

ここでの問題は、left joinをwhere句で内部結合にしたためです。列を参照するときは、常に表を指定するという習慣が必要です。 –

+2

http://wiki.lessthandot.com/index.php/WHERE_conditions_on_a_LEFT_JOIN – HLGEM

答えて

0

ザにおける

おかげ。 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は、デフォルトのソート順ですので、指定する必要はありません。正しい方向に私を指しているためLOC_ID IN ("AF","LO","S","SL")

おかげ@SeanLangeとして表現するとき

  • あなたのLOC_IDフィルタは簡単です。

  • +0

    これはそれでした。私は、SQLを理解することになると私はまだ行く方法があることを知っています。ありがとう – enano2054

    関連する問題