2013-11-20 61 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语法。

相关问题