#sql #postgresql
#sql #postgresql
Вопрос:
У меня есть таблица со следующими данными:
licence_number
date_of_birth
organisation
Я хочу выполнить запрос, в котором:
Получите licence_numbers и dob в organization1, где те же номера лицензий и dob находятся в organization2.
Я знаю, что это не может быть так сложно, но я изо всех сил.
Комментарии:
1. Изо всех сил? Пожалуйста, покажите результаты вашей борьбы.
2. Это действительно плохой признак того, что пользователи с высокой репутацией отвечают на вопросы, не требующие никаких усилий со стороны OP, даже если OP приложил к этому какие-либо усилия. Смотрите здесь сам: 2 ответа пользователей, чья общая репутация превышает 100 тыс.
3. @SatwikNadkarny Ну, я не говорю, что это хороший вопрос, но причина закрытия «должен отображать минимальное понимание» исчезла, и проблема, насколько я вижу, четко сформулирована. Если вы видите подходящую причину закрытия, не стесняйтесь голосовать за закрытие.
4. @JoachimIsaksson Дело здесь не в «минимальном понимании». Речь идет о помощи и руководстве людьми в той области, в которой они испытывают трудности. Вопрос не содержит никаких признаков усилий и является скорее вопросом типа «дайте мне код, пожалуйста». Вот в чем проблема!!
5. @JoachimIsaksson И, кстати, простое утверждение «я борюсь» не может рассматриваться как «реальное усилие», если это то, что вы думаете.
Ответ №1:
Вы можете сгруппировать по license_number и date_of_birth, где для организации задана любая из двух интересных организаций, и подсчитать, сколько разных организаций в группе.
Если в одной группе есть два из двух возможных, у вас есть попадание.
SELECT license_number, date_of_birth
FROM mytable
WHERE organisation IN ('organisation1', 'organisation2')
GROUP BY license_number, date_of_birth
HAVING COUNT(DISTINCT organisation) = 2;
… или вы можете использовать INTERSECT
;
SELECT license_number, date_of_birth
FROM mytable WHERE organisation = 'organisation1'
INTERSECT
SELECT license_number, date_of_birth
FROM mytable WHERE organisation = 'organisation2'
Комментарии:
1. Что заставляет вас думать, что есть две таблицы? И вы получаете одинаковую организацию от обоих. В чем смысл?
2. @ClodoaldoNeto Спасибо, вы абсолютно правы. Я обновил ответ, чтобы ответить на правильную вещь 🙂
3. Спасибо, intersect — это то, что мне было нужно. По какой-то причине я пытался выполнить объединения. Полностью забыл о intersect.
Ответ №2:
select
from t t0
where
organization = 'organization1'
and
exists (
select 1
from t
where
organization = 'organization2'
and
licence_number = t0.licence_number
and
date_of_birth = t0.date_of_birth
)
Комментарии:
1. @joop Вероятно, потому, что даунвотер не понял ни вопроса, ни ответа
Ответ №3:
Вы можете просто самостоятельно присоединиться к таблице, в которой номер лицензии и даты совпадают, а организация — нет:
SELECT DISTINCT p1.licence_number, p1.date_of_birth
FROM people p1
INNER JOIN people p2
ON p1.licence_number = p2.licence_number AND
p1.date_of_birth = p2.date_of_birth AND
p1.organisation <> p2.organisation
Ответ №4:
Это ОБЪЕДИНЕНИЕ или 1 таблица?
Select
[licence_number],
[date_of_birth],
[organisation]
From YourTable
Where organisation1 = organisation2
--OR
Select
[licence_number],
[date_of_birth],
[organisation]
From YourTable
Where organisation1 IN ('organisation2','organisation3','organisation3')
Order By [licence_number]
Комментарии:
1. Это недопустимый SQL (для Postgres и любой другой стандартной базы данных).
2. Вам нужен открытый исходный код, а затем MySQL