2013-03-04 92 views
1

首先Table-- 產品在SQL查詢選擇與條件多個表

P_ID P_Name D_Flag 
37 keyboard N 
38 mouse  N 
39 hardisk  Y 
40 pendrive Y 
41 printer  Y 
42 CD-DVD  Y 
43 cardreader Y 

和第二表 Product_Detail

P_ID P_ID P_Prize P_Company D_Flag 
11 37 600  Intex  N  
12 38 200  Enter  N 
13 39 1000  XYZ  N 
14 40 200  SONY  Y 
15 41 5000  LG  Y 

則輸出應該like-- ------> ProductList

P_Name  P_Prize P_Company 
hardisk  --  -- 
pendrive  200  SONY 
printer  5000  LG 
CD-DVD  --  -- 
cardreader --  -- 

注意 - 爲此表產品列表中包含的產品名稱(P_Name),產品獎(P_Prize)和產品公司(P_Company),其中Product.D_Flag = 'Y',並從表Product_Detail這裏應該選擇那些場Product_Detail.D_Flag = 'Y'。否則值應該爲空。

+1

這是我的功課? – Kaf 2013-03-04 08:59:24

+0

Pleaase格式代碼 – DevelopmentIsMyPassion 2013-03-04 08:59:32

回答

1

這應做到:

SELECT p.p_name, pd.p_prize, pd.p_company 
FROM product p 
LEFT JOIN product_detail pd ON p.p_id = pd.p_id AND pd.d_flag = 'Y' 
WHERE p.d_flag = 'Y' 

所以,你在做什麼是你挑選每一行中product和WHERE子句它限制到了d_flag被設置爲Y.

你的人然後是左外連接,這意味着您可以獲得左側(產品中)的所有行以及右側的product_detail中的任何交點。連接條件與行相匹配,但僅與詳細表中的d_flag爲'Y'的行相匹配。這不會放在WHERE子句中,因爲您取消了外部聯接(您將不會獲得沒有聯接的行)。

0
SELECT a.P_NAME, 
     COALESCE(b.P_Prize, '--') Prize, 
     COALESCE(b.P_Company, '--') CompanyName 
FROM Product a 
     LEFT JOIN product_Detail b 
      ON a.P_ID = b.P_ID AND 
       a.D_FLAG = 'Y' AND 
       b.D_FLAG = 'Y' 
-- WHERE additional conditions here 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

1
SELECT P.p_name, Case When PL.p_prize is Null Then "--" Else PL.p_prize END, 
     Case When PL.p_company is Null Then "--" ELSE PL.p_company 
    FROM Product P 
    LEFT JOIN Product_Detail PL ON P.p_id = PL.p_id AND PL.d_flag = 'Y' 
WHERE P.d_flag = 'Y' 
+0

您可以使用@JW中提到的合併來代替Case語句 – DevelopmentIsMyPassion 2013-03-04 09:10:46

1
select p_name,decode(b.d_flag,'N',null,p_prize) p_prize,decode(b.d_flag,'N',null,P_Company) P_Company 
from product a,product_detail b 
where a.p_id=b.p_id;