我有2个表,code
和price
:
表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
我需要从第一个表格中获取code
,name
和section
以及从第二个表格中获取price
基于第二个表中的transaction
和id
。如果给定代码的价格不可用,则用户可将其视为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';
当我在第二张表中定义价格但是当我尝试检索第二张表中没有定价的记录时,我没有记录。
答案 0 :(得分:1)
基本上你需要一个左连接,但是有一个问题,你不能从第二个表中得到任何结果,因为你正在过滤它的数据p.id = 1001 AND p.transactionby = 'q@abc.com';
所以,当没有价格时它意味着你不能拥有这个注册表,因为它简单不存在。如果id
和transactionby
在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 = '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语法。