SQL запрос объединить инструкции выбора

#sql #sqlite

#sql #sqlite

Вопрос:

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

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

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

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

Комментарии:

1. Вызываете ли вы object_id из обеих инструкций select? В противном случае вы получите сообщение об ошибке

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

Ответ №1:

Используйте ЛЕВОЕ соединение, подобное:

 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