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

MySQL-Lösung für die Konfiguration mehrerer Instanzen

1.1 Was ist MySQL Multi-Instance? Einfach ausgedr...

Vue ruft die PC-Kamera auf, um die Fotofunktion zu realisieren

In diesem Artikelbeispiel wird der spezifische Co...

Erläuterung zum Lastenausgleich und Reverseproxy von Nginx

Inhaltsverzeichnis Lastenausgleich Klassifizierun...

Tutorial zum Anmelden bei MySQL nach der Installation von Mysql 5.7.17

Die Installation von mysql-5.7.17 wird weiter unt...

So rufen Sie einen HTML-Code auf mehreren HTML-Seiten gemeinsam auf

Methode 1: Skriptmethode verwenden: Erstellen Sie...

js zur Implementierung der Kollisionserkennung

In diesem Artikelbeispiel wird der spezifische Co...

So verstehen Sie die Dateninteraktion und -anzeige im Vue-Frontend und -Backend

Inhaltsverzeichnis 1. Technischer Überblick 2. Te...

Erfahren Sie, wie Sie den JVM-Speicher von Tomcat über JConsoler überwachen

Inhaltsverzeichnis 1. So überwachen Sie Tomcat 2....

Grundlegende Anweisungen der MySQL-Datendefinitionssprache DDL

MySQL DDL-Anweisungen Was ist DDL, DML. DDL ist e...

Detaillierte Installationshistorie von Ubuntu 20.04 LTS

In diesem Artikel wird die Erstellung einer USB-S...