Кто-нибудь знает, как выполнить такой запрос в Postgresql?
SELECT *
FROM tabA
WHERE NOT EXISTS (
SELECT *
FROM tabB
WHERE tabB.id = tabA.id
)
Когда я выполняю такой запрос, postgresql жалуется «ERROR: Greenplum Database does not yet support that query
».
РЕДАКТИРОВАТЬ: А как насчет этого:
SELECT *
FROM tabA
WHERE NOT EXISTS (
SELECT *
FROM tabB WHERE tabB.id = tabA.id AND tabB.id2 = tabA.id2
)
EDIT:
Я проверил в postgresql 8.2.15 4 ответа, предоставленных @ypercube. Выводы такие:
1) Первое не работает в этой версии postgresql, как я уже говорил выше в вопросе. Там же можно найти сообщение об ошибке.
2) Для остальных трех ответов скорость выполнения равна: (3) LEFT JOIN > (4) EXCEPT >> (2) NOT IN.
В частности, для запросов с одинаковым синтаксисом (3) LEFT JOIN занимает около 5580 мс, (4) EXCEPT занимает около 13502 мс и (2) NOT IN занимает более 100000 (на самом деле я не стал ждать, пока он завершится). ).
Есть ли особые причины, по которым предложение NOT IN работает так медленно?
Ченг
EXISTS
иNOT EXISTS
. postgresql.org/support/versioning - person kgrittn   schedule 30.06.2012CREATE TABLE
) двух таблиц, запросы и планы выполнения. - person ypercubeᵀᴹ   schedule 30.06.2012