Heim >Datenbank >MySQL-Tutorial >FIND_IN_SET() vs. IN() in MySQL: Wann sollte ich jedes verwenden?
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)
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)
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)
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!