2017-06-16 16 views
1

私はこれらの2つのテーブルで結合機能を実行するのに苦労しています。私はサンプルデータセットを単純化しましたが、最初のテーブルに追加のwhere節が含まれていますが、問題はないようです。値に基づくテーブルの結合

私は下の2つのテーブルを結合するためのクエリを記述します。

select a.prod_code, a.prod_name, b.ref_value from Product_code a 
left join Product_reference b on a.prod_code = b.pref_code 
where a.prod_code <> 'CURTAIN' and b.ref_value = 'MAN' 

私が直面してる問題は、私は一種の条件付きのテーブルに参加したいということです。私。 ref_typeの値がProduct_referenceテーブルで 'MAN'であれば、私はそれに参加したいです。

この例では、 "Product_name"にref_type 'MAN'がないため、結果に「Chair」は含まれません。私が必要としているのは依然としてProduct_referenceテーブルの結合された値なしで(つまり、ref_type 'MAN'という値は存在しないので)、結果を完全に残さないように、クエリ結果に表示します。

一方PRODUCT_NAMEテーブルレコード「カーテン」(Product_referenceのref_type「MAN」が存在するかどうかにかかわらず場合)中断されるべきである

推奨事項?

Product_code  
prod_code prod_name 

A   Table 
B   Chair 
C   Window 
D   Door 
E   Curtain 


Product_reference  
pref_code ref_type ref_value 

A   MAN   x 
A   AUTO  y 
B   AUTO  z 
C   AUTO  z1 
C   MAN   x1 
D   AUTO  zxc 
E   AUTO  abc 
E   MAN   cba 
+0

このヘルプ?,選択a.prod_code、a.prod_name、PRODUCT_CODE からb.ref_valueがProduct_reference bを参加左行いon a.prod_code = b.pref_code ここで、a.prod_name <> 'CURTAIN'およびb.ref_type = 'MAN' – dkb

答えて

1

結合述語に移動b.ref_value = 'MAN'

SELECT a.prod_code, a.prod_name, b.ref_value 
FROM Product_code a 
LEFT JOIN Product_reference b ON a.prod_code = b.pref_code AND b.ref_value = 'MAN' 
WHERE a.prod_code <> 'CURTAIN' 

これはあなたが望むものを達成する、唯一の代わりに、結果から他のすべての行を削除するの、b.ref_value = 'MAN'表Bからのデータを結合し残っています全体を設定します。

ご質問とサンプルデータを非常にうまく作成していただきありがとうございます。我々はそれを感謝します。あなたは、内側を使用することができ

0

は 'MAN' を持っている別の製品に参加

select 
    a.prod_code 
    , a.prod_name 
    , b.ref_value 
from Product_code a 
inner join (
    select distinct pref_code 
    from Product_reference 
    where ref_type = 'MAN') t2 on t2.pref_code = a.prod_code 
     and a.prod_code <> 'CURTAIN' 
関連する問題