Heim > Datenbank > MySQL-Tutorial > Wie kann eine „AND'-Bedingung über mehrere Zeilen hinweg in SQL effizient simuliert werden?

Wie kann eine „AND'-Bedingung über mehrere Zeilen hinweg in SQL effizient simuliert werden?

Mary-Kate Olsen
Freigeben: 2025-01-05 17:43:44
Original
528 Leute haben es durchsucht

How to Efficiently Simulate an

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
    )
)
Nach dem Login kopieren

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
Nach dem Login kopieren

Diese Abfrage Funktioniert durch:

  1. Filtern der „Tags“-Tabelle nach Zeilen, in denen „tagid“ mit dem gewünschten übereinstimmt Tagids.
  2. Gruppierung der Ergebnisse nach „contentID“, um Inhalte zu identifizieren, die mit diesen Tagids getaggt sind.
  3. Verwendung der „HAVING“-Klausel, um sicherzustellen, dass nur Inhalte getaggt werden, die mit allen angegebenen Tagids (d. h. COUNT of.) getaggt sind unique „tagid“ = 3) ist enthalten.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage