Heim >Datenbank >MySQL-Tutorial >Warum fehlen in meiner MySQL-WHERE-IN-Abfrage Zeilen mit mehreren übereinstimmenden Werten?

Warum fehlen in meiner MySQL-WHERE-IN-Abfrage Zeilen mit mehreren übereinstimmenden Werten?

Barbara Streisand
Barbara StreisandOriginal
2024-11-05 20:29:02493Durchsuche

Why Does My MySQL WHERE IN Query Miss Rows with Multiple Matching Values?

MySQL WHERE IN-Abfrage für mehrere übereinstimmende Werte

Beim Versuch, Daten aus einer MySQL-Tabelle mithilfe der WHERE IN()-Klausel abzurufen, um sie abzugleichen Bei mehreren Werten kann es zu einem Problem kommen, bei dem Zeilen mit mehreren übereinstimmenden Werten nicht zurückgegeben werden. Dieses Verhalten kann verwirrend sein, da Sie davon ausgehen können, dass alle Zeilen mit einem der angegebenen Werte zurückgegeben werden.

Erklärung

Die WHERE IN()-Klausel wird verwendet Wählen Sie Zeilen basierend darauf aus, ob ihre angegebenen Spaltenwerte mit einem der angegebenen Werte in den Klammern übereinstimmen. Wenn eine Zeile jedoch mehrere übereinstimmende Werte aufweist, beispielsweise sowohl 1 als auch 3, wird die Abfrage in eine Reihe von ODER-Bedingungen übersetzt:

<code class="sql">SELECT * FROM table WHERE id='1' OR id='2' OR id='3' OR id='4';</code>

Das bedeutet, dass nur Zeilen, die genau mit einem der angegebenen Werte übereinstimmen, übereinstimmen zurückgegeben werden.

Lösung

Um dieses Problem zu beheben, können Sie die folgenden Methoden in Betracht ziehen:

Methode 1: Verwenden des SET-Datentyps

Durch Ändern des Datentyps der ID-Spalte in SET können Sie mehrere Werte in einer einzigen Zeile speichern. Sie können dann die Funktion FIND_IN_SET() verwenden, um nach Zeilen abzufragen, die bestimmte Werte enthalten:

<code class="sql">SELECT * FROM table WHERE FIND_IN_SET('1', id);</code>

Diese Abfrage gibt alle Zeilen zurück, in denen die ID-Spalte den Wert „1“ enthält, unabhängig davon, ob andere Werte vorhanden sind Werte.

Methode 2: Verwenden von UNION oder Unterabfrage

Ein alternativer Ansatz besteht darin, eine UNION oder Unterabfrage zu verwenden, um mehrere Abfragen zu kombinieren, die jeweils einem der angegebenen Werte entsprechen:

<code class="sql">SELECT * FROM table WHERE id = 1
UNION
SELECT * FROM table WHERE id = 3;</code>

Diese Abfrage gibt alle Zeilen zurück, die entweder 1 oder 3 entsprechen, unabhängig vom Vorhandensein anderer Werte.

Das obige ist der detaillierte Inhalt vonWarum fehlen in meiner MySQL-WHERE-IN-Abfrage Zeilen mit mehreren übereinstimmenden Werten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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