Извините за название, я просто не знаю, как объяснить, чего я хочу добиться вкратце. Но на самом деле все просто.
У меня есть следующая таблица egr
:
+---------+------------+
| offid | groupid |
+---------+------------+
| 1 | 101 |
| 1 | 202 |
| 2 | 202 |
| 2 | 404 |
+---------+------------+
Я хотел бы получить строки, для которых groupid не связан с другим offid. Результат будет:
+---------+------------+
| offid | groupid |
+---------+------------+
| 1 | 101 |
| 2 | 404 |
+---------+------------+
Это работает, но мне было интересно, есть ли более элегантный способ сделать это?
select * from egr as egr1
where egr1.offid = 1
and egr1.groupid not in (select groupid from egr as egr2 where egr2.offid = 2 and egr1.groupid = egr2.groupid)
union
select * from egr as egr1
where egr1.offid = 2
and egr1.groupid not in (select groupid from egr as egr2 where egr2.offid = 1 and egr1.groupid = egr2.groupid)
Если вы хотите попробовать:
create table egr (offid int, groupid int);
insert into egr values (1, 101), (1, 202), (2, 202), (2, 404);
Спасибо