Предложение NOT EXISTS в Postgresql

Кто-нибудь знает, как выполнить такой запрос в 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 работает так медленно?
Ченг

20
задан cheng 30 June 2012 в 12:30
поделиться