0

次のクエリを実行しようとしています:

SELECT ifnull(sum(item_actual_qty),0) + b.item_opening_balance as closing
FROM transaction_inventory AS a 
LEFT JOIN inventory_master as b
ON b.item_code = a.item_code and b.company_code = a.company_code
WHERE a.item_Code = 2222
      AND a.company_code = '52889497-5b6b-403d-8f83-224e3c7759b4'
      AND a.trans_type_name NOT IN ('Sales Order','Purchase Order')
  AND a.trans_date < '2010-04-01' ;

transaction_inventory にレコードがない場合でも、inventory_master からレコードを選択するにはどうすればよいですか? 現在、マスターテーブルから実際のアイテムの開始残高を与える必要があるb.item_opening_balanceに null 値を与えています。

のようなサブクエリを置く

SELECT ifnull(sum(item_actual_qty),0) +
(select item_opening_balance from inventory_master where item_code = a.item_code) as closing
FROM transaction_inventory AS a 
WHERE a.item_Code = 2222
  AND a.company_code = '52889497-5b6b-403d-8f83-224e3c7759b4'
  AND a.trans_type_name NOT IN ('Sales Order','Purchase Order')
  AND a.trans_date < '2010-04-01'

inventory_master からアイテムの期首残高を返しますが、サブクエリの使用を避けています

4

2 に答える 2

1

いずれかのテーブルのすべてのレコードが必要な場合は、外部結合を使用する必要があります。

select ifnull(sum(item_actual_qty),0) as aa,b.item_name,a.item_Code from  transaction_inventory AS a right outer join inventory_master as b
on b.item_code = a.item_code and b.company_code = a.company_code
WHERE  a.item_Code = 2222
       and a.company_code = '52889497-5b6b-403d-8f83-224e3c7759b4'
       AND a.trans_type_name NOT IN ('Sales Order','Purchase Order')
       AND a.trans_date < '2010-04-01' ;

from 句の順序を変更する場合は、左外部結合も使用できます。

select ifnull(sum(item_actual_qty),0) as aa,b.item_name,a.item_Code from   inventory_master as b left outer join transaction_inventory AS a
on b.item_code = a.item_code and b.company_code = a.company_code
WHERE  a.item_Code = 2222
       and a.company_code = '52889497-5b6b-403d-8f83-224e3c7759b4'
       AND a.trans_type_name NOT IN ('Sales Order','Purchase Order')
       AND a.trans_date < '2010-04-01' ;

左側のテーブルが右側のテーブルの null 値に関係なくすべてのレコードを返すテーブルである場合は左外部結合を使用し、すべてのレコードを含むテーブルが右側にある場合は右外部結合を使用します。

于 2013-09-04T04:38:22.003 に答える