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
1
2
3
4
5
6
7
8
9
10
11
12
SELECT DISTINCT p.idFROM Projects pWHERE NOT EXISTS (SELECT s.idFROM Skills sWHERE NOT EXISTS (SELECT 1FROM Project_Skills psWHERE ps.project_id = p.idAND 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.