У меня такой запрос:
select a1.name, b1.info
from (select name, id, status
from table1 a) as a1
right outer join (select id, info
from table2 b) as b1 on (a1.id = b1.id)
Я хочу включить все, где a1.status = 1, и поскольку я использую внешнее соединение, я не могу просто добавить ограничение where
к table1, потому что всю информацию из таблицы2, которую я хочу исключить все еще будет там, просто без имени. Я думал что-то вроде этого:
select z1.name, z1.info
from ((select name, id, status
from table1 a) as a1
right outer join (select id, info
from table2 b) as b1 on (a1.id = b1.id)) as z1
where z1.status = 1
но я не думаю, что это законно.
EDIT:
Как описано ниже, внешнее соединение на самом деле не имеет смысла для того, что я пытаюсь сделать. Что, если, например, мне нужны все данные из таблицы 2, где статус! = 1 в таблице 1, включая все данные, в которых соответствующий идентификатор вообще не существует в таблице 1. Таким образом, мне нужно было бы внешнее объединение всех данных из таблицы 2, но все же нужно исключить те записи, где статус = 1.
Эквивалент этому:
select z1.name, z1.info
from ((select name, id, status
from table1 a) as a1
right outer join (select id, info
from table2 b) as b1 on (a1.id = b1.id)) as z1
where z1.status != 1