


FIND_IN_SET() vs. IN(): Die Diskrepanz in Abfrageergebnissen verstehen
Beim Abfragen relationaler Datenbanken ist es notwendig, den Unterschied zu verstehen zwischen den Funktionen FIND_IN_SET() und IN(). In diesem Artikel wird ihr Verhalten in einem bestimmten Datenbankszenario untersucht.
Problem:
Betrachten Sie zwei Tabellen: Aufträge und Unternehmen. Die Auftragstabelle enthält eine Spalte „attachedCompanyIDs“, die eine durch Kommas getrennte Liste von Firmen-IDs enthält. Die Firmentabelle enthält die tatsächlichen Firmennamen. Wenn Sie mit der Funktion FIND_IN_SET() eine Abfrage zum Abrufen von mit einer Bestellung verknüpften Firmennamen durchführen, werden alle erwarteten Ergebnisse zurückgegeben. Das Ersetzen von FIND_IN_SET() durch IN() in der Abfrage gibt jedoch nur den ersten Firmennamen zurück.
Ursache:
Die Funktion IN() interpretiert angehängteCompanyIDs als einzelne Ganzzahl, während FIND_IN_SET() es als Zeichenfolge behandelt. Wenn „attachedCompanyIDs“ in eine Ganzzahl umgewandelt wird, werden nur die Ziffern bis zum ersten nicht numerischen Zeichen (dem Komma) beibehalten. Folglich gibt die IN()-Abfrage nur das Unternehmen zurück, das mit der ersten Zahl in der durch Kommas getrennten Liste verknüpft ist.
Lösung:
Um dieses Problem zu umgehen, bietet PostgreSQL an eine robustere Lösung:
SELECT name FROM orders JOIN company ON companyID = ANY(('{' || attachedCompanyIDs || '}')::INT[]) WHERE orderID = 1;
Diese Abfrage nutzt die ANY()-Funktion, um attachmentCompanyIDs als Array umzuwandeln und so die effektive Nutzung von zu ermöglichen ein Index für die Firmen-ID.
Update:
Für MySQL-Datenbanken, denen die Array-Unterstützung fehlt, kann ein alternativer Ansatz verwendet werden:
SELECT name FROM orders CROSS JOIN ( SELECT 1 AS pos UNION ALL SELECT 2 AS pos UNION ALL SELECT 3 AS pos UNION ALL SELECT 4 AS pos UNION ALL SELECT 5 AS pos ) q JOIN company ON companyID = CAST(NULLIF(SUBSTRING_INDEX(attachedCompanyIDs, ',', -pos), SUBSTRING_INDEX(attachedCompanyIDs, ',', 1 - pos)) AS UNSIGNED);
Diese Abfrage durchläuft potenzielle Positionen und extrahiert Teilzeichenfolgen aus angehängten Unternehmens-IDs, um sie an die Unternehmens-ID anzupassen. Es umfasst mehrere Verknüpfungen, bleibt jedoch für Szenarien mit einer begrenzten Anzahl von Unternehmens-IDs in der durch Kommas getrennten Liste funktionsfähig.
Das obige ist der detaillierte Inhalt vonFIND_IN_SET() vs. IN(): Warum gibt das eine alle Ergebnisse zurück, während das andere nur das erste zurückgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

TodropaviewInmysql, verwenden Sie "dropviewifexistsView_name;" und tomodifyAview, verwenden Sie "creetorReplaceViewView_nameasSelect ...". WhendroppingAView, AXIZENDENDEPENTENDENSANDUSUSE "SHOWREATEVIEWVIEW_NAME;" "

MySQLViewScaneffectivItilizedEntatternSliKeadapter, Dekorateur, Factory undobserver.1) adapterPatternAdaptsdatafromDifferentTableStoaunifiedView.2) DekoratorpatternHancesDataWithokulediel.3) FactoryPatherncreat.ProduculedFeld.3) FactoryPathertoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoryPectoration

ViewSinMysqLarbenicialforSimplifyTyComplexQueries, Verbesserung der Sicherheit, Sicherstellung von Dataconsistenz und optimizierterformance.1) SimplifyComplexQueriesbyCapscapsThemintorusableViewViews.2) ViewSenhiteCurityByControllingDataAccess.3) TheenedatacocurityBycaprollingDataAccess.3) TheenedatacocurityBycaprollingDataAccess.3) TheenedatacocurityBycaperingDataAccess.3) TheenedatacocurityBycaperingDataAccess.3) TheenedatacocurityByCaperingDataAccess.3) TheenedatacocourityByCaprollingDataAccess.3) Theensedataco

ToCreateAsimpleviewInmysql, UsethecreateviewStatement.1) definessetheviewWithCreateView_nameas.2)

Tocreateusersinmysql, useTheCecreateuserStatement.1) ForAlocalUser: CreateUser'LocalUser '@' localhost'ididentifiedBy'SecurePassword ';

MySQLViewShavelimitations: 1) Sie sind supportallsqloperationen, restriktedatamanipulation ThroughviewswithjoinSuBqueries.2) Sie können sich angesehen, insbesondere mit der kompetenten Formata -Ansichten, die docrexQuqueriesorlargedatasets angezeigt werden

OrteSermanagementinmysqlisicialforenHancingSecurityAnsuringEffizienceDatabaseoperation.1) Usecreateutertoaddusers, spezifizierende Connections mit 'localhost'or@'%'.

Mysqldoes nicht imposeahardlimitontriggers, aber praktische Faktorendeterminetheireffectiveuse: 1) serverconfigurationImpactstriggermanagement;


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)
