Oracle:匹配第一个和第二个表的行

时间:2013-11-20 10:24:38

标签: sql oracle

我有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       q@abc.com    10   500
2      xyz      anes       w@abc.com    5    200 
3      pqr       tbr       q@abc.com    10   100

我需要从第一个表格中获取codenamesection以及从第二个表格中获取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 = 'q@abc.com';

当我在第二张表中定义价格但是当我尝试检索第二张表中没有定价的记录时,我没有记录。

1 个答案:

答案 0 :(得分:1)

基本上你需要一个左连接,但是有一个问题,你不能从第二个表中得到任何结果,因为你正在过滤它的数据p.id = 1001 AND p.transactionby = 'q@abc.com';所以,当没有价格时它意味着你不能拥有这个注册表,因为它简单不存在。如果idtransactionbytable1上,您可能会想要什么。要获得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 = 'q@abc.com') 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语法。