Zwei Lösungen für das Problem, dass MySQL in bedingten Anweisungen nur eine Information liest

Zwei Lösungen für das Problem, dass MySQL in bedingten Anweisungen nur eine Information liest

Heute ist mein Kollege beim Schreiben von MySQL-Abfrageanweisungen auf ein sehr merkwürdiges Problem gestoßen. Bei der Verwendung einer MySQL-Abfrage mit mehreren Tabellen wird ein Feld in einer Tabelle als Abfragebedingung einer anderen Tabelle verwendet. Es kann nur eine Information gelesen werden, aber wenn eine Zahl direkt verwendet wird, kann sie normal gelesen werden.

Die SQL-Anweisung lautet wie folgt:

wähle a.id,a.title,b.idlist,b.aid aus Tabelle a,Tabelle2 b, wobei a.id in(b.idlist) und b.aid=2

Das Feld idlist in Tabelle2 ist vom Typ varchar und speichert mehrere ID-Informationen in der Tabelle, d. h. 1, 1,2,3,4

Mit der obigen Anweisung können Sie ganz normal abfragen, aber Sie können nur eine Information abfragen. Mit der folgenden Anweisung können Sie jedoch ganz normal lesen.

wähle a.id,a.title,b.idlist,b.aid aus Tabelle a,table2 b, wobei a.id in(1,2,3,4) und b.aid=2 ist

Das ist ein sehr seltsames Problem. Zuerst dachte ich, es sei ein Datentypproblem, aber um Daten im Format 1,2,3,4 zu speichern, kann ich nur den Zeichentyp verwenden. Ich habe viele Möglichkeiten ausprobiert, konnte das Problem aber nicht lösen, bis ich die Funktion FIND_IN_SET() in MYSQL gefunden habe. Im Folgenden finden Sie eine grundlegende Einführung in die Funktion FIND_IN_SET().

Syntax: FIND_IN_SET(str,strlist)

Definition:

1. Wenn sich der String str in der Stringliste strlist befindet, die aus N Unterketten besteht, liegt der Rückgabewert zwischen 1 und N.

2. Eine Zeichenfolgenliste ist eine Zeichenfolge, die aus einer Anzahl von Selbstlinks besteht, die durch die Symbole „,“ getrennt sind.

3. Wenn das erste Argument eine konstante Zeichenfolge und das zweite eine typeSET-Spalte ist, wird die Funktion FIND_IN_SET() für die Verwendung bitweiser Berechnungen optimiert.

4. Wenn str nicht in strlist enthalten ist oder strlist eine leere Zeichenfolge ist, ist der Rückgabewert 0.

5. Wenn ein beliebiger Parameter NULL ist, ist der Rückgabewert NULL. Diese Funktion funktioniert nicht richtig, wenn das erste Argument ein Komma (',') enthält.

strlist: Eine durch Kommas verbundene Zeichenfolge, z. B. „a,b,c,d“. Die Zeichenfolge ähnelt dem durch Kommas verbundenen Wert vom Typ SET.

Beispiel: SELECT FIND_IN_SET('b','a,b,c,d'); //Der Rückgabewert ist 2, also der zweite Wert

OK, versuchen wir es zunächst und ändern die ursprüngliche SQL-Anweisung zu

Wählen Sie a.id, a.title, b.idlist, b.aid aus Tabelle a, Tabelle2 b, wobei FIND_IN_SET(a.id, b.idlist) und b.aid=2

Führen Sie die geänderte Anweisung aus, und sie kann schließlich normal gelesen werden. Nach der Analyse des Grundes liegt es letztendlich am Datentypproblem. Wenn wir direkt in (b.idlist) lesen, ist die gelesene b.idlist ein Zeichentyp, und in akzeptiert nur Zahlen. Obwohl beide "," haben, sind sie tatsächlich völlig unterschiedlich.

Nun, das Problem ist gelöst. Wenn Sie mehr über die Verwendung der Funktion FIND_IN_SET() erfahren möchten, können Sie die entsprechenden Artikel auf der Seite lesen.

Das könnte Sie auch interessieren:
  • Analysieren Sie die Probleme der SQL-Anweisungseffizienzoptimierung beim Lesen, Schreiben, Indizieren und anderen Vorgängen in MySQL-Tabellen
  • MySQL SQL-Anweisung zum Suchen doppelter Daten basierend auf einem oder mehreren Feldern
  • So ermitteln Sie die Abfragezeit einer MySQL-SQL-Anweisung in PHP
  • MySQL fragt den aktuellsten Datensatz der SQL-Anweisung ab (Optimierung)
  • Mysql aktualisiert bestimmte Felder einer anderen Tabelle basierend auf Daten aus einer Tabelle (SQL-Anweisung)
  • MySQL fängt die SQL-Anweisung der String-Funktion ab
  • Verwenden Sie SQL-Anweisungen, um alle Datenbanknamen, Tabellennamen und Feldnamen in MySQL, SQLServer und Oracle abzufragen
  • 10 SQL-Anweisungsoptimierungstechniken zur Verbesserung der MySQL-Abfrageeffizienz
  • Eine SQL-Anweisung schließt die MySQL-Deduplizierung ab und behält eine
  • MySQL-Anweisungsanordnung und zusammenfassende Einführung

<<:  Fragen zum Vorstellungsgespräch zu JS 9 Promise

>>:  Installieren Sie Windows Server 2019 auf VMware Workstation (Grafisches Tutorial)

Artikel empfehlen

Node.js erstellt ein einfaches Crawler-Case-Tutorial

Vorbereitung Zuerst müssen Sie nodejs herunterlad...

7 interessante Möglichkeiten, versteckte Elemente in CSS zu erreichen

Vorwort Die Ähnlichkeiten und Unterschiede zwisch...

Detaillierte Erläuterung der Methode zum Vergleichen von Daten in MySQL

Wenn es eine Tabelle mit einem Feld „add_time“ gi...

Probleme bei der Installation von MySQL und mysql.sock unter Linux

Vor kurzem traten bei der Installation von Apache...

MySQL 8.0.11 Installationstutorial mit Bildern und Text

Es gibt viele Tutorials im Internet und sie sind ...

Methode zur Erstellung von Vue-Scaffolding-Lernprojekten

1. Was ist Scaffolding? 1. Vue-CLI Vue CLI ist ei...

Detaillierte Erläuterung der Verwendung von MySQL sql_mode

Inhaltsverzeichnis Vorwort sql_mode erklärt Die w...

HTML-Hyperlinks im Detail erklärt

Hyperlink Hyperlinks sind die am häufigsten verwen...

Allgemeine Probleme mit der Regelpriorität beim Nginx-Standort

Inhaltsverzeichnis 1. Standort / Matching 2. Stan...

Probleme und Lösungen bei der Installation und Verwendung von VMware

Die virtuelle Maschine wird verwendet oder es kan...

Implementierung der MySQL-Datendesensibilisierung (Telefonnummer, ID-Karte)

1. Erklärung zur Datendesensibilisierung Bei den ...