2017-06-16 43 views
1

我在這兩個表上做了一些連接功能的困難。我簡化了示例數據集,因爲第一個表中包含額外的where子句,但這似乎不成問題。根據值連接表

我會寫查詢加盟下面兩個表:

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' 

我現在面臨的問題是,我想加入的表樣的條件。即如果在Product_reference表中ref_type值是'MAN',我確實想加入它,否則不會。

例如,此查詢在結果中不包含「Chair」,因爲它在「Product_name」中沒有可用的ref_type'MAN'。我所需要的仍然是在查詢結果中顯示它,只是沒有從Product_reference表中加入值(假設ref_type'MAN'的值不存在),所以不要把它全部放在外面。

同時PRODUCT_NAME表記錄「窗簾」應該離開(如果不考慮Product_reference ref_type「人」的存在與否)

任何建議?

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中的數據,其中b.ref_value = 'MAN',而不是從結果中刪除所有其他行完全設置。

請注意,謝謝您將您的查詢和示例數據包含在您的問題中。我們感謝它。

0

你可以使用內部連接上有「人」的獨特產品

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'