Simulieren eines „UND“ über mehrere Zeilen in SQL
Im Bereich relationaler Datenbanken ist das effiziente Abrufen von Daten auf der Grundlage mehrerer Kriterien von entscheidender Bedeutung , insbesondere beim Umgang mit großen Datenmengen. Stellen Sie sich das folgende Szenario vor: eine „Tags“-Tabelle mit zwei Spalten, „tagid“ und „contentid“, die Tags darstellen, die verschiedenen Inhaltsteilen zugewiesen sind. Das Ziel besteht darin, die „Content-ID“ von Inhalten abzurufen, die mit einem bestimmten Satz von Tag-IDs (z. B. 334, 338 und 342) getaggt sind.
Ein naiver Ansatz würde verschachtelte Unterabfragen beinhalten, die effektiv wie folgt übersetzt werden:
SELECT contentid FROM tags WHERE tagid = 334 AND contentid IN ( SELECT contentid FROM tags WHERE tagid = 338 AND contentid IN ( SELECT contentid FROM tags WHERE tagid = 342 ) )
Dieser Ansatz funktioniert zwar, wird jedoch für eine große Anzahl von Tagids umständlich und ineffizient. Glücklicherweise gibt es eine effizientere und erweiterbare Lösung.
Mithilfe satzbasierter Operationen kann eine einzige Abfrage formuliert werden, die Unterabfragen überflüssig macht:
SELECT contentID FROM tags WHERE tagID IN (334, 338, 342) GROUP BY contentID HAVING COUNT(DISTINCT tagID) = 3
Diese Abfrage Funktioniert durch:
Diese Lösung bleibt auch für eine große Anzahl von effizient tagids, da es sich nicht um verschachtelte Unterabfragen oder rekursive Operationen handelt. Die zeitliche Komplexität bleibt linear in Bezug auf die Anzahl relevanter Tagids, wodurch es für große Datensätze und Ad-hoc-Abfragen geeignet ist.
Das obige ist der detaillierte Inhalt vonWie kann eine „AND'-Bedingung über mehrere Zeilen hinweg in SQL effizient simuliert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!