capypad
0 Tage Serie
sql / expert
Snippet

Korrelierte Unterabfragen für Anti-Joins

Eine korrelierte Unterabfrage bezieht sich auf Spalten der äußeren Abfrage. Die Verwendung von NOT EXISTS mit einer korrelierten Unterabfrage ist eine performante Methode zur Implementierung von Anti-Joins, um z. B. Kunden ohne Bestellung im letzten Jahr zu finden.

snippet.sql
sql
1
2
3
4
5
6
7
8
SELECT c.customer_name
FROM customers c
WHERE NOT EXISTS (
SELECT 1
FROM orders o
WHERE o.customer_id = c.id
AND o.order_date > CURRENT_DATE - INTERVAL '365' DAY
);
Erklärung
1
WHERE NOT EXISTS (
Filtert nach Zeilen, für die die Unterabfrage keine Ergebnisse liefert.
2
SELECT 1 FROM orders o
Die Unterabfrage wählt eine Konstante, um den Overhead zu minimieren, da nur die Existenz zählt.
3
WHERE o.customer_id = c.id
Die Korrelation: verknüpft den Datensatz der Unterabfrage mit der aktuellen äußeren Zeile.