Heim > Datenbank > MySQL-Tutorial > FIND_IN_SET() vs. IN() in MySQL: Wann sollte ich jedes verwenden?

FIND_IN_SET() vs. IN() in MySQL: Wann sollte ich jedes verwenden?

Barbara Streisand
Freigeben: 2024-12-18 04:12:15
Original
583 Leute haben es durchsucht

FIND_IN_SET() vs. IN() in MySQL: When Should I Use Each?

Find_in_set() vs. IN(): Den Unterschied verstehen

In MySQL spielen die Operatoren FIND_IN_SET() und IN() eine entscheidende Rolle beim Abfragen von Daten aus Tabellen. Während beide zum Testen der Zugehörigkeit zu einer Reihe von Werten verwendet werden können, unterscheiden sie sich in der Art und Weise, wie sie mit bestimmten Szenarien umgehen.

Betrachten Sie die folgende Abfrage, die darauf abzielt, die Namen von Unternehmen abzurufen, die mit einer Bestellung verknüpft sind:

SELECT name
FROM orders, company
WHERE orderID = 1 AND FIND_IN_SET(companyID, attachedCompanyIDs)
Nach dem Login kopieren

Diese Abfrage liefert erfolgreich alle drei Firmennamen: Company 1, Another Company und StackOverflow. Wenn wir jedoch FIND_IN_SET() durch IN() ersetzen, ist das Ergebnis unerwartet:

SELECT name
FROM orders, company
WHERE orderID = 1 AND companyID IN (attachedCompanyIDs)
Nach dem Login kopieren

In diesem Fall wird nur der erste Firmenname, Firma 1, zurückgegeben. Um zu verstehen, warum, ist es wichtig, die zugrunde liegende Mechanik dieser Operatoren zu verstehen.

FIND_IN_SET()

FIND_IN_SET() führt eine wörtliche Suche nach einem bestimmten Wert innerhalb eines Kommas durch -getrennte Zeichenfolge. In diesem Fall enthält attachmentCompanyIDs eine Zeichenfolge wie „1,2,3“. FIND_IN_SET() gibt die Position des Zielwerts (1, 2 oder 3) innerhalb dieser Zeichenfolge zurück oder 0, wenn nicht gefunden.

IN()

IN () hingegen erwartet eine Liste von Werten, die mit dem Zielwert verglichen werden sollen. In MySQL handelt es sich bei „attachedCompanyIDs“ jedoch um einen Skalarwert und nicht um ein Array oder eine Liste. Daher versucht MySQL, diese Skalarzeichenfolge für den IN()-Vergleich in eine Ganzzahl (den Typ der Firmen-ID) umzuwandeln.

Während der Umwandlung interpretiert MySQL das erste Komma in der Zeichenfolge („1,2,3“ ) als Ende des numerischen Teils, was zu einem ganzzahligen Wert von 1 führt. Im Wesentlichen wird die IN()-Bedingung effektiv zu:

companyID IN (1)
Nach dem Login kopieren

Dies erklärt, warum nur der erste Firmenname, Firma 1 wird abgerufen. Die IN()-Bedingung gilt nur für den ersten Wert in der durch Kommas getrennten Zeichenfolge.

Lösungen

Wenn die Annahme gilt, dass die Anzahl der Werte im Komma -Getrennte Listen sind begrenzt, man kann alternative Ansätze verwenden, um solche Szenarien effektiv zu bewältigen.

Das obige ist der detaillierte Inhalt vonFIND_IN_SET() vs. IN() in MySQL: Wann sollte ich jedes verwenden?. 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