#sql #oracle #compare
#sql #Oracle #Сравнить
Вопрос:
Я приношу извинения за плохую формулировку названия моего вопроса. Я довольно новичок в SQL, и я не совсем уверен, как бы я назвал этот тип запроса сравнения.
У меня есть пара таблиц, и мне нужно запросить их, чтобы узнать, нет ли у кого-либо с учетной записью пользователя почтового адреса в файле. Адреса хранятся в одной таблице независимо от того, являются ли они почтовыми или физическими. Разница просто обозначается столбцом типа, который будет либо ‘M’, либо ‘P’. Таким образом, пользователи должны иметь 2 строки, связанные с ними, одна для их почтового адреса и одна для их физического адреса.
//I want to do something like this
SELECT * FROM
USER
, ADDR
WHERE USER.ADDR_ID = ADDR.ID
AND ADDR.TYPE = 'P';
SELECT * FROM
USER
, ADDR
WHERE USER.ADDR_ID = ADDR.ID
AND ADDR.TYPE = 'M';
А затем найдите пользователей с одним адресом с типом = ‘P’, но без адреса с типом = ‘M’.
Ответ №1:
Вы можете использовать агрегацию или not exists
:
select u.*
from users u
where exists (select 1 from addr a where u.addr_id = a.id and a.type = 'P') and
not exists (select 1 from addr a where u.addr_id = a.id and a.type = 'M')
Комментарии:
1. Также возможно левое внешнее соединение.