2013-11-20 4 views
1

У меня 2 таблицы, code и price:Oracle: Соответствующие строки из первой и второй таблицы

Таблица 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, name и section от 1-й таблицы и price из 2 таблицы на основе transaction и id из 2 таблицы. Если цена не доступна для данного кода пользователей может видеть его как 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]'; 

Я получаю записи, когда есть цена определить во 2-е таблицы, но там это не запись, когда я пытаюсь получить записи, которые не имеют цены во второй таблице.

ответ

1

В принципе вам нужно левое соединение, но есть проблема, вы не можете получить какие-либо результаты из второй таблицы, потому что вы фильтруете данные из нее p.id = 1001 AND p.transactionby = '[email protected]';, поэтому, когда нет цены, это означает, что вы не можете иметь этот реестр, потому что это просто не существует. То, что вы хотите, было бы возможно, если 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 = '[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 синтаксис только.

Смежные вопросы