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?

Dec 18, 2024 am 04:12 AM

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!

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Reduzieren Sie die Verwendung des MySQL -Speichers im Docker Reduzieren Sie die Verwendung des MySQL -Speichers im Docker Mar 04, 2025 pm 03:52 PM

Reduzieren Sie die Verwendung des MySQL -Speichers im Docker

Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung? Wie verändern Sie eine Tabelle in MySQL mit der Änderungstabelleanweisung? Mar 19, 2025 pm 03:51 PM

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 So lösen Sie das Problem der MySQL können die gemeinsame Bibliothek nicht öffnen Mar 04, 2025 pm 04:01 PM

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

Was ist SQLite? Umfassende Übersicht Was ist SQLite? Umfassende Übersicht Mar 04, 2025 pm 03:55 PM

Was ist SQLite? Umfassende Übersicht

Führen Sie MySQL in Linux aus (mit/ohne Podman -Container mit Phpmyadmin) Führen Sie MySQL in Linux aus (mit/ohne Podman -Container mit Phpmyadmin) Mar 04, 2025 pm 03:54 PM

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 Ausführen mehrerer MySQL-Versionen auf macOS: Eine Schritt-für-Schritt-Anleitung Mar 04, 2025 pm 03:49 PM

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)? Wie sichere ich mich MySQL gegen gemeinsame Schwachstellen (SQL-Injektion, Brute-Force-Angriffe)? Mar 18, 2025 pm 12:00 PM

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)? Was sind einige beliebte MySQL -GUI -Tools (z. B. MySQL Workbench, PhpMyAdmin)? Mar 21, 2025 pm 06:28 PM

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

See all articles