плохо знаком с SQL, и я понимаю, что объединения, как правило, выполняются быстрее, чем подзапросы.У меня есть следующая таблица, и мой текущий запрос дает мне требуемые результаты, но я не могу обернуть голову вокруг аналогичного запроса, который вместо этого использует self join, предполагая, что это возможно.
Таблица
id scheduled_id action_id
------------ ------------ ------------
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 3 1
Схема
create table ma (
id integer primary key,
scheduled_id integer,
action_id integer
);
insert into ma (
id,
scheduled_id,
action_id
)
values
(1, 1, 1),
(2, 1, 2),
(3, 1, 3),
(4, 2, 1),
(5, 2, 2),
(6, 3, 1);
Запрос
select * from ma where action_id = 3
union all
select * from ma where scheduled_id not in (
select scheduled_id from ma
where action_id = 3)
Результат
id scheduled_id action_id
------------ ------------ ------------
3 1 3
4 2 1
5 2 2
6 3 1
В моем результате должны быть все строки со значением action_id, равным 3 плюсвсе строки для тех запланированных идентификаторов, которые не имеют значения action_id, равного 3.
. sqlfiddle можно найти по адресу http://sqlfiddle.com/#!5/0ba51/3.
Спасибо.