FIND_IN_SET() vs. IN() in MySQL: Wann sollte ich jedes verwenden?
Dec 18, 2024 am 04:12 AMFind_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!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Reduzieren Sie die Verwendung des MySQL -Speichers im Docker

Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung?

So lösen Sie das Problem der MySQL können die gemeinsame Bibliothek nicht öffnen

Führen Sie MySQL in Linux aus (mit/ohne Podman -Container mit Phpmyadmin)

Ausführen mehrerer MySQL-Versionen auf macOS: Eine Schritt-für-Schritt-Anleitung

Wie sichere ich mich MySQL gegen gemeinsame Schwachstellen (SQL-Injektion, Brute-Force-Angriffe)?

Was sind einige beliebte MySQL -GUI -Tools (z. B. MySQL Workbench, PhpMyAdmin)?
