2010-07-15 4 views
1

рассмотрим следующий пример. alt text http://i26.tinypic.com/1zo7mub.jpgСправка по SQL-запросу

Я должен выбрать все записи из table1, которые существуют в table2 также + все записи из table2, которые не существуют в table1, но существуют в table2 и имеют IsActive = 1 и состояние не равно нулю.

Сначала я попробовал его с присоединением, но как сделать более позднюю часть, где мне нужно выбрать записи, которых нет в таблице 1? Я должен сделать это внутри одного запроса, предположительно, с представлением SQL.

Редактировать Ребятам мне нужно объединить результаты как UNION 2 таблиц, так упаковывают строки, отсутствующих в table1, но присутствующие в table2, столбцы, принадлежащие table1 будут пустыми.

ответ

2

Вот пример запроса:

select * 
from Table2 t2 
left join 
     Table1 t1 
on  t1.id = t2.id 
where t1.id is not null 
     or (isActive = 1 and status is not null) 

Первая линия, где положение заботится о «всех записей из table1, которые существуют в table2». Вторая строка предназначена для «не существует в таблице1, но существует в таблице2 и имеет IsActive = 1 и статус не null».

+0

спасибо Andomar, вы можете взглянуть на мой запрос? Он не работает, хотя я пытался схожу с вами. Кроме того, почему вы использовали OR вместо AND? Также таблица1 соединена над таблицей2. Любая причина ? –

+0

@Popo: Вам нужно будет уточнить, что «не работает». OR - показать строки, которые удовлетворяют хотя бы одному условию; с И, им придется отвечать всем условиям. Я начинаю с Table2, потому что вы хотите показывать строки из таблицы2, хотя в таблице 1 нет соответствующей строки. – Andomar

+0

Привет, с моим предыдущим запросом Я получаю столбцы только из 1 таблицы и нулевые столбцы из таблицы 2. Также я не могу получить ваш запрос для работы –

0

Является ли это? Не уверен, что я прав, что вы хотите сделать.

SELECT 
    * 
FROM 
    Table1 t1 
     JOIN 
    Table2 t2 ON (t1.ID = t2.ID OR (t1.ID IS NULL AND t2.isActive = 1 AND t2.Status IS NOT NULL)) 
Смежные вопросы