capypad
0 Tage Serie
sql / expert
Snippet

Relationale Division mittels doppelter Negation

Die relationale Division wird verwendet, um Entitäten zu identifizieren, die mit jedem Datensatz einer Zielmenge verknüpft sind. Da SQL keinen nativen 'DIVIDE'-Operator besitzt, nutzen wir die doppelte Negation mit NOT EXISTS, um Projekte zu finden, für die es 'keinen Skill gibt, der nicht in diesem Projekt vorhanden ist'.

snippet.sql
sql
1
2
3
4
5
6
7
8
9
10
11
12
SELECT DISTINCT p.id
FROM Projects p
WHERE NOT EXISTS (
SELECT s.id
FROM Skills s
WHERE NOT EXISTS (
SELECT 1
FROM Project_Skills ps
WHERE ps.project_id = p.id
AND ps.skill_id = s.id
)
);
Erklärung
1
WHERE NOT EXISTS (SELECT s.id FROM Skills s ...)
Beginnt die Prüfung auf Skills, die möglicherweise im Projekt fehlen.
2
WHERE NOT EXISTS (SELECT 1 FROM Project_Skills ps ...)
Die innere Negation prüft, ob die spezifische Projekt-Skill-Beziehung fehlt.