Heim > Datenbank > MySQL-Tutorial > Wie wählt man effizient Datensätze aus, die mehreren Bedingungen in derselben Spalte in SQL entsprechen?

Wie wählt man effizient Datensätze aus, die mehreren Bedingungen in derselben Spalte in SQL entsprechen?

Linda Hamilton
Freigeben: 2025-01-21 15:56:10
Original
225 Leute haben es durchsucht

How to Efficiently Select Records Matching Multiple Conditions on the Same Column in SQL?

Tipp zur SQL-Abfrage mit mehreren Bedingungen für Datensätze in derselben Spalte

Bei SQL-Abfragen erfordert das Filtern von Datensätzen basierend auf mehreren Bedingungen, insbesondere wenn diese Bedingungen für dieselbe Spalte gelten, einige Fähigkeiten. In diesem Artikel erfahren Sie, wie Sie mit dieser Situation effizient umgehen können.

Zum Beispiel ordnet eine Tabelle Benutzer und Tag-Typen zu und das Ziel besteht darin, die Kontakt-ID zu erhalten, die mit dem Häkchen in allen Suchformularen übereinstimmt. Auf den ersten Blick erscheint die folgende Abfrage intuitiv:

<code class="language-sql">SELECT contactid 
WHERE flag = 'Volunteer' 
AND flag = 'Uploaded'...</code>
Nach dem Login kopieren

Es werden jedoch keine Ergebnisse zurückgegeben. Weil der UND-Operator erfordert, dass dieselbe Zeile gleichzeitig zwei Bedingungen erfüllt, und eine solche Zeile in dieser Tabelle nicht vorhanden ist.

Um dieses Problem zu lösen, besteht eine Möglichkeit darin, GROUP BY und HAVING COUNT(*) = n zu verwenden, wobei n die Anzahl der ausgewählten Marker ist:

<code class="language-sql">SELECT contact_id
FROM your_table
WHERE flag IN ('Volunteer', 'Uploaded', ...)
GROUP BY contact_id
HAVING COUNT(*) = 2 -- // 必须与WHERE flag IN (...) 列表中的数量匹配</code>
Nach dem Login kopieren

Diese Methode prüft, ob die contact_id n-mal mit jedem der n Tags vorkommt, die in der WHERE-Klausel enthalten sind. Eine andere Möglichkeit ist die Verwendung von join:

<code class="language-sql">SELECT T1.contact_id
FROM your_table T1
JOIN your_table T2 ON T1.contact_id = T2.contact_id AND T2.flag = 'Uploaded'
-- // 如有必要,可以添加更多连接
WHERE T1.flag = 'Volunteer'</code>
Nach dem Login kopieren

Hier werden mehrere Joins verwendet, um Zeilen, die dieselbe contact_id darstellen, mit den erforderlichen Tags zu verknüpfen.

Welche Methode Sie wählen, hängt von der Anzahl der zu prüfenden Tags und der Anzahl der übereinstimmenden Datensätze ab. GROUP BY kann schneller sein, wenn es um eine große Anzahl von Tags und eine kleine Anzahl von Übereinstimmungen geht, während der Join möglicherweise eine bessere Leistung erbringt, wenn die Anzahl der Tags gering ist und es viele Übereinstimmungen gibt. Es wird empfohlen, beide Methoden an realen Daten zu testen, um die beste Leistung zu erzielen.

Das obige ist der detaillierte Inhalt vonWie wählt man effizient Datensätze aus, die mehreren Bedingungen in derselben Spalte in SQL entsprechen?. 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