Wählen Sie Datensätze aus, die mehreren Bedingungen in derselben Spalte in SQL entsprechen
SQL-Abfragen müssen manchmal Datensätze abrufen, die mehreren Bedingungen in derselben Spalte entsprechen. Allerdings führt die einfache Verwendung mehrerer WHERE-Klauseln mit denselben Spalten nicht immer zu den erwarteten Ergebnissen. Betrachten Sie das folgende Beispiel:
Wir verfügen über eine Datenbanktabelle mit Kontakten und Flags, die den Status jedes Kontakts anzeigen. Die Tabelle enthält die folgenden Daten:
ID | contactid | flag | flag_type |
---|---|---|---|
118 | 99 | Volunteer | 1 |
119 | 99 | Uploaded | 2 |
120 | 100 | Via Import | 3 |
121 | 100 | Volunteer | 1 |
122 | 100 | Uploaded | 2 |
Ziel ist es, nur Kontakt-IDs zurückzugeben, die sowohl den Flag-Bedingungen „Freiwilliger“ als auch „Hochgeladen“ entsprechen. Verwenden Sie die folgende Abfrage:
<code class="language-sql">SELECT contactid WHERE flag = 'Volunteer' AND flag = 'Uploaded'</code>
Es werden keine Ergebnisse zurückgegeben, da jede Bedingung nur nach einem bestimmten Flag-Wert prüft. Um die erforderlichen Daten abzurufen, müssen wir eine alternative Methode verwenden.
Verwenden Sie GROUP BY und HAVING
Eine Lösung besteht darin, die Klauseln GROUP BY und HAVING zu verwenden. Die folgende Abfrage gruppiert die Ergebnisse nach Kontakt-ID und zählt die Anzahl der übereinstimmenden Flag-Werte:
<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>
Kontakte mit der Flagge „Freiwilliger“ und „Hochgeladen“ werden als 2 gezählt. Die HAVING-Klausel filtert dann die Ergebnisse, um nur diese Kontakte einzuschließen.
Verbindung verwenden
Eine andere Möglichkeit besteht darin, Verbindungen zu nutzen. Die folgende Abfrage führt einen Self-Join für die Tabelle „your_table“ durch:
<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>
Diese Abfrage erstellt eine temporäre Tabelle mit der Kombination aller Kontakte, die sowohl die Flaggen „Freiwilliger“ als auch „Hochgeladen“ haben. Die WHERE-Klausel filtert dann die Ergebnisse, um nur Kontakte einzubeziehen, die diese beiden Bedingungen erfüllen.
Methodenauswahl
Die beste Möglichkeit, Datensätze mit mehreren Bedingungen in derselben Spalte auszuwählen, hängt von der Größe und Struktur Ihrer Daten ab. Bei großen Datensätzen mit langen Listen übereinstimmender Kriterien sind die Lösungen GROUP BY und HAVING möglicherweise effizienter. Bei kleinen Datensätzen mit einer kürzeren Liste übereinstimmender Kriterien ist die JOIN-Lösung möglicherweise schneller.
Das obige ist der detaillierte Inhalt vonWie wähle ich Datensätze aus, die mehreren Kriterien in derselben Spalte in SQL entsprechen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!