Сталкивался ли с Anti JOIN в PostgreSQL
Python
Junior
Без компании
Сталкивался ли с Anti JOIN в PostgreSQL
Ответы
Да, Anti JOIN (или Anti Semi JOIN) — это техника для нахождения записей в одной таблице, которых нет в другой. В PostgreSQL это реализуется через `LEFT JOIN` с проверкой на NULL или через `NOT EXISTS`.
Пример с `LEFT JOIN`:
```
SELECT a.*
FROM table_a a
LEFT JOIN table_b b ON a.id = b.a_id
WHERE b.a_id IS NULL;
```
Пример с `NOT EXISTS` (часто более эффективен):
```
SELECT a.*
FROM table_a a
WHERE NOT EXISTS (
SELECT 1 FROM table_b b
WHERE b.a_id = a.id
);
```
Ключевые моменты:
- `LEFT JOIN` + NULL проверка может быть менее эффективна на больших таблицах
- `NOT EXISTS` обычно оптимизируется лучше
- В PostgreSQL также есть `EXCEPT`, но он работает иначе (сравнивает полные наборы строк)