Кто-нибудь знает, как выполнить такой запрос в Postgresql?
SELECT *
FROM tabA
WHERE NOT EXISTS (
SELECT *
FROM tabB
WHERE tabB.id = tabA.id
)
Когда я выполняю такой запрос, postgresql жалуется: «ОШИБКА: база данных Greenplum еще не поддерживает этот запрос
».
РЕДАКТИРОВАТЬ: А как насчет этого:
SELECT *
FROM tabA
WHERE NOT EXISTS (
SELECT *
FROM tabB WHERE tabB.id = tabA.id AND tabB.id2 = tabA.id2
)
РЕДАКТИРОВАТЬ:
Я тестировал в 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 работает так медленно?
Ченг