Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выборка по составному ID / 7 сообщений из 7, страница 1 из 1
09.07.2014, 13:28:10
    #38691849
Kvasnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по составному ID
Добрый день.
В "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
09.07.2014, 13:36:26
    #38691870
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по составному ID
Kvasnikov,

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

Код: sql
1.
WHERE ("ID1", "ID2") NOT IN (SELECT "ID1","ID2" FROM "Table2")
...
Рейтинг: 0 / 0
09.07.2014, 13:44:16
    #38691888
Kvasnikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по составному ID
Alexius, спасибо.
...
Рейтинг: 0 / 0
09.07.2014, 18:57:50
    #38692313
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по составному ID
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
09.07.2014, 22:02:04
    #38692414
Sergei.Agalakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по составному ID
Максим прав, и будьте осторожны с NULL. Надеюсь, у вас оба ID1 и ID2 not null в обеих таблицах?
...
Рейтинг: 0 / 0
09.07.2014, 23:19:26
    #38692481
кактотак
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по составному ID
Sergei.AgalakovМаксим прав,<>it depends

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

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


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