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
1
2
3
4
5
6
7
8
SELECT c.customer_nameFROM customers cWHERE NOT EXISTS (SELECT 1FROM orders oWHERE o.customer_id = c.idAND 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.