Кто-нибудь знает, как выполнить такой запрос в 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
."
EDIT: И как насчет этого:
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) ЗА ИСКЛЮЧЕНИЕМ → (2) NOT IN.
В частности, для запросов, имеющих один и тот же синтаксис, (3) LEFT JOIN занимает около 5580 мс, (4) EXCEPT занимает около 13502 мс, а (2) NOT IN занимает более 100000 (на самом деле я не ожидал,).
Есть ли какие-то особые причины для того, чтобы предложение NOT IN было настолько медленным?
Cheng