2016-10-21 3 views
1

У меня есть SQL-запрос, как следующим образом:SQL запросов смешайте операторов выбора

SELECT *r1.val, r2.prevVal 
FROM (Select statement) AS r1, 
(Select statement) AS r2 
WHERE 
r1.object_id = r2.object_id 

Это работает, проблема в том, когда r2 выберите оператор возврата ничего, поэтому, все геЬигп ничего, потому что он не может выполнить r1.object_id = r2.object_id.

Как я могу воспроизвести тот же оператор, который будет выводить значения, если в предложении выбора есть значения r1 и нет значений в заявлении выбора r2? Поэтому я могу получить доступ к значению r1.val.

+0

Вы призываете object_id от обоих выбранных утверждений? Если нет, вы получите сообщение об ошибке –

+1

. Вы используете синтаксис соединения, который был сделан избыточным в 1992 году. Вы больше не должны его использовать. Вместо этого используйте явные объединения: 'from r1 inner join r2 on ...', если вы хотите, чтобы внутреннее соединение или 'от r1 осталось внешним соединением r2 on ...', когда вы хотите внешнее соединение. (Вы используете внутреннее соединение, но действительно хотите использовать внешнее соединение здесь.) –

ответ

2

Используйте LEFT JOIN, как:

SELECT *r1.val, r2.prevVal 
FROM (Select statement) AS r1 
LEFT JOIN (Select statement) AS r2 ON r1.object_id = r2.object_id ---------------------Formatted as code 
Смежные вопросы