2013-11-20 62 views
1

匹配行我有2個表,codeprice甲骨文:從第一和第二表

表1

code name section 
1  abc  lab 
2  xyz  anes 
3  pqr  tbr 

表2

code name section transaction id price  
1  abc  lab  [email protected] 10 500 
2  xyz  anes  [email protected] 5 200 
3  pqr  tbr  [email protected] 10 100 

我需要得到code,namesection1臺price基於從第二表transactionid第二表。如果價格不適用於給定的代碼的用戶可以把它看成0

我寫了一個查詢此

SELECT c.code, c.name ,c.section,p.price 
    FROM First c, second p 
WHERE c.code IN 
      ('00', '00', '00', '00', '01140', '01160', '01180', '01210', 
      '01212', '01215', '01200', '01670', '01680', '01682', '00', '00') 
    AND c.code = p.code 
    AND p.id = 1001 
    AND p.transaction = '[email protected]'; 

我得到的記錄時,有一個價格表第二個定義,但有當我嘗試檢索在第二個表中沒有價格定義的記錄時,沒有記錄。

回答

1

基本上你需要一個左連接,但有一個問題,你不能從第二個表中得到任何結果,因爲你正在過濾它的數據p.id = 1001 AND p.transactionby = '[email protected]';所以,當沒有價格時,它意味着你不能擁有這個註冊表,因爲它簡單不存在。如果idtransactionby位於table1上,您可能會想要什麼。要獲得c.code, c.name, c.section, p.cptprice,您必須使用子查詢進行左連接,但仍有可能無法獲得結果。

SELECT c.code, c.name ,c.section,p.cptprice 
    FROM First c, 
     (select * 
      from second 
     where id = 1001 
      and transactionby = '[email protected]') p 
WHERE c.code IN 
      ('00', '00', '00', '00', '01140', '01160', '01180', '01210', 
      '01212', '01215', '01200', '01670', '01680', '01682', '00', '00') 
    AND c.code = p.code(+) 

c.code = p.code(+)只是oracle語法。

相關問題