powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка по составному ID
7 сообщений из 7, страница 1 из 1
Выборка по составному ID
    #38691849
Kvasnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
В "Table1" уникальность записи определяется составным ID состоящим из двух полей - "ID1" и "ID2"
Необходимо выбрать все записи, ID которых не встречается в "Table2"
То есть нужен запрос типа
Код: plsql
1.
2.
3.
4.
SELECT * 
FROM "Table1"
WHERE "ID1" NOT IN (SELECT "ID1" FROM "Table2")
  AND "ID2" NOT IN (SELECT "ID1" FROM "Table2")


Но в таком варианте поля "ID1" и "ID2" рассматриваются отдельно друг от друга, а мне нужно что бы исключались именно конкретные пары "ID1" и "ID2", что-то типа
Код: plsql
1.
 WHERE "ID1" AND "ID2" NOT IN (SELECT "ID1","ID2" FROM "Table2")
...
Рейтинг: 0 / 0
Выборка по составному ID
    #38691870
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kvasnikov,

запрос почти правильный, не хватает только скобок.

Код: sql
1.
WHERE ("ID1", "ID2") NOT IN (SELECT "ID1","ID2" FROM "Table2")
...
Рейтинг: 0 / 0
Выборка по составному ID
    #38691888
Kvasnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexius, спасибо.
...
Рейтинг: 0 / 0
Выборка по составному ID
    #38692313
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KvasnikovДобрый день.
В "Table1" уникальность записи определяется составным ID состоящим из двух полей - "ID1" и "ID2"
Необходимо выбрать все записи, ID которых не встречается в "Table2"
То есть нужен запрос типа
Код: plsql
1.
2.
3.
4.
SELECT * 
FROM "Table1"
WHERE "ID1" NOT IN (SELECT "ID1" FROM "Table2")
  AND "ID2" NOT IN (SELECT "ID1" FROM "Table2")


Но в таком варианте поля "ID1" и "ID2" рассматриваются отдельно друг от друга, а мне нужно что бы исключались именно конкретные пары "ID1" и "ID2", что-то типа
Код: plsql
1.
 WHERE "ID1" AND "ID2" NOT IN (SELECT "ID1","ID2" FROM "Table2")



общий совет - NOT IN (во всяком случае в Postgres) - очень медленный и неэффективный метод для такой задачи... используйте
NOT EXISTS будет быстрее да и понятнее:
Код: plsql
1.
WHERE NOT EXISTS (SELECT * FROM "Table2" WHERE "Table2".ID1="Table1".ID1 and "Table2".ID2="Table1".ID2) 



--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Выборка по составному ID
    #38692414
Sergei.Agalakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим прав, и будьте осторожны с NULL. Надеюсь, у вас оба ID1 и ID2 not null в обеих таблицах?
...
Рейтинг: 0 / 0
Выборка по составному ID
    #38692481
кактотак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergei.AgalakovМаксим прав,<>it depends

скажем - табла2 из 200 записей. таблица1 - из 2000000 -- тут максим сосёт. хотя и не слишком много. (в предположении что пж не облажается с планами, как оно любит)

если же всё наоборот + по паре id на т2 есть индекс - макс прав.
...
Рейтинг: 0 / 0
Выборка по составному ID
    #38692484
кактотак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
совсем забыл.
пж еще хорошие планы для EXCEPT иногда умеет, когда всё другое сосёт. Хотя не припомню уж для каких особостей/соотношений.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка по составному ID
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]