@SeniorDmitry

Как проверить существование записи?

Добрый день! Возник вопрос, как проверить существование записей передавая id записей в IN.

Таблица cities (содержится информация, о городе)
Таблица сountry (информация,  о стране).
Таблица Т3 в которой есть маппинг между сountry и cities. 

В таблице cities есть 2 записи 
id: 1, name: Москва
id: 2, name: Пенза

В таблице сountry есть 1 запись
id: 1, name: Россия

В таблице T3 есть 1 запись
id:1, id_city:1, id_сountry:1

Я думал можно сделать так 
select exists(select * from T3 where id_сountry=1 AND id_city IN (1, 2));

НО он найдет id_city 1 и скажет try, а нужно решение чтобы он вернул false, потому что в T3 нет id_city = 2.

Подскажите пожалуйста решение или напутствие.
  • Вопрос задан
  • 2740 просмотров
Решения вопроса 1
@SeniorDmitry Автор вопроса
select (select count(DISTINCT id_city) from T3 where id_сountry=1 AND id_city IN (1, 2)) = 2;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
Ну например,
select exists(
select from unnest(array[1,2]) as city where not exists (select from T3 where id_сountry=1 AND id_city = city)
)


select exists(values(1),(2) except select id_city from T3 where id_сountry=1 AND id_city IN (1, 2));


select (select count(*) from T3 where id_сountry=1 AND id_city IN (1, 2)) = 2; -- где = 2 - число элементов в in
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы