Detailliertes Beispiel für die Verkettung mehrerer Felder in MySQL

Detailliertes Beispiel für die Verkettung mehrerer Felder in MySQL

Das Zusammenführen von Zeilen- und Feldergebnissen der MySQL-Abfrage kann mithilfe der folgenden beiden Funktionen implementiert werden:

1. Concat-Funktion

mysql> wähle concat('1','2','3') aus Test;
+---------------------+
| concat('1','2','3') |
+---------------------+
| 123 |
+---------------------+

Wenn die Verbindungszeichenfolge NULL enthält, ist das Rückgabeergebnis NULL:

mysql> wähle concat('1','2',NULL,'3') aus Test;
+--------------------------+
| concat('1','2',NULL,'3') |
+--------------------------+
| NULL |
+--------------------------+

2. concat_ws-Funktion

concat(separator,str1,str2,...) steht für concat mit Trennzeichen und ist eine spezielle Form von concat(). Der erste Parameter ist das Trennzeichen für die anderen Parameter. Das Trennzeichen wird zwischen die beiden zu verkettenden Zeichenfolgen gesetzt. Das Trennzeichen kann eine Zeichenfolge oder ein anderer Parameter sein.

mysql> wähle concat_ws(':','1','2','3') aus Test;
+----------------------------+
| concat_ws(':','1','2','3') |
+----------------------------+
| 1:2:3 |
+----------------------------+

Wenn das Trennzeichen NULL ist, ist der Rückgabewert NULL:

mysql> wähle concat_ws(NULL,'1','2','3') aus Test; 
+-----------------------------+
| concat_ws(NULL,'1','2','3') |
+-----------------------------+
| NULL | 
+-----------------------------+

Wenn der Parameter NULL enthält, wird er ignoriert:

mysql> wähle concat_ws(':','1','2',NULL,NULL,NULL,'3') aus Test;
+----------------------------------------------+
| concat_ws(':','1','2',NULL,NULL,NULL,'3') |
+----------------------------------------------+
| 1:2:3 |
+----------------------------------------------+

Sie können NULL beurteilen und durch andere Werte ersetzen:

mysql> wähle concat_ws(':','1','2',ifNULL(NULL,'0'),'3') aus Banklimit 1; 
+---------------------------------------------+
| concat_ws(':','1','2',wennNULL(NULL,'0'),'3') |
+---------------------------------------------+
| 1:2:0:3 | 
+---------------------------------------------+

Ergänzung: Ergänzung: Beim Gruppieren in MySQL die Werte eines Feldes verketten

t_dog Tabelle

t_vaccine-Tabelle

t_dog_vaccine-Tabelle

Problembeschreibung

Ich muss den Impfstoff abfragen, der jedem Hund in dog_vaccine entspricht. Da zwischen Hunden und Impfstoffen eine Viele-zu-viele-Beziehung besteht, kann ein Hund mehreren Impfstoffen entsprechen, aber ich möchte diese mehreren Impfstoffe mithilfe von Zeichenfolgen zu einem einzigen zusammenfassen und sie dann einer Java-Entitätsklasse zuordnen.

Löse es Schritt für Schritt

Ich habe zwei Left-Join-Abfragen verwendet, um die drei Tabellen t_dog, t_vaccine und t_dog_vaccine zu verknüpfen.

wähle dv.id als ID,
 d.Hundename als Hundename,v.Impfstoffname 
 aus 
 t_Hundeimpfstoff dv
  links beitreten t_dog d auf dv.dog_id = d.id
  linke Verbindung t_vaccine v auf dv.vaccine_id = v.id

Obwohl dies mit dem Hund und dem Impfstoff übereinstimmt, gibt es für jeden Hund mehrere Datensätze, und ich möchte nur Daten wie den Namen des Hundes und die Werte mehrerer Impfstoffnamen in einer Zeichenfolge zusammenführen. Als ich darüber nachdachte, fiel mir plötzlich „Gruppieren nach“ ein.

wähle dv.id als ID,
 d.Hundename als Hundename,v.Impfstoffname 
 aus 
 t_Hundeimpfstoff dv
  links beitreten t_dog d auf dv.dog_id = d.id
  linke Verbindung t_vaccine v auf dv.vaccine_id = v.id 
  Gruppieren nach Hundename

Die Verwendung von „group by“ ist offensichtlich nicht das erwartete Ergebnis. Obwohl es nur einen Hundenamen gibt, gibt es nur einen entsprechenden Impfstoff. Ich möchte mehrere Impfstoffnamen. Was soll ich tun? Gibt es eine Funktion, die Zeichenketten verketten kann? Emmmm, verstanden, group_concat. . .

wähle dv.id als ID,
 d.dog_name als Hundename,
 group_concat(v.Impfstoffname) als dogVaccineName  
 aus 
 t_Hundeimpfstoff dv
  links beitreten t_dog d auf dv.dog_id = d.id
  linke Verbindung t_vaccine v auf dv.vaccine_id = v.id 
 Gruppierung nach d.dog_name

Dadurch wurde der gewünschte Effekt erzielt.

group_concat-Verwendung

Standardverwendung

Wählen Sie group_concat(Impfstoffname) als Hundeimpfstoffname aus t_Impfstoff, wobei die ID in (Wählen Sie Impfstoff-ID aus t_Hundeimpfstoff, wobei Hunde-ID = 1) ist.

Das Standardtrennzeichen für group_concat ist ','. Wenn wir dieses Trennzeichen ändern möchten, können wir das tun.

REPLACE(group_concat(vaccine_name),',','Fügen Sie hier das Trennzeichen ein, das Sie ändern möchten.')

Ich möchte beispielsweise die Standardeinstellung wie folgt ändern:

Wählen Sie REPLACE(group_concat(Impfstoffname),',',';') als Hundeimpfstoffname aus t_Impfstoff, wobei die ID in (Wählen Sie Impfstoff-ID aus t_Hundeimpfstoff, wobei Hunde-ID = 1) ist.

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • So weisen Sie Feldern bei der MySQL-Abfrage Standardwerte zu
  • In der MySQL-Befehlszeile ein Feld zur Tabelle hinzufügen (Feldname, ob es leer ist, Standardwert)
  • MySQL-Tabellenfeld-Standardwert festlegen (grafisches Tutorial und auf Details achten)
  • Ausführliche Erläuterung versteckter Felder, einer neuen Funktion von MySQL 8.0
  • Eine kurze Diskussion darüber, welche Felder in Mysql für die Indizierung geeignet sind
  • MySQL-Update-Fall Update-Feldwert ist keine feste Operation
  • Beim Ändern eines Datensatzes in MySQL lautet die Aktualisierungsoperation Feld = Feld + Zeichenfolge
  • So teilen und führen Sie mehrere Werte in einem einzigen Feld in MySQL zusammen
  • Detaillierte Analyse der Syntax von Mysql-Updates zum Ändern mehrerer Felder und
  • So legen Sie den Standardwert eines MySQL-Felds fest

<<:  Erklärung des HTML-Codes der Webseite: geordnete Liste und ungeordnete Liste

>>:  css Alle Elemente ab dem n-ten abrufen

Artikel empfehlen

Machen Sie sich nicht die Mühe mit JavaScript, wenn es mit CSS geht

Vorwort Jede Anwendung, die in JavaScript geschri...

Benutzerdefiniertes Auswahlfeld für die Webseite Auswählen

Jeder ist wahrscheinlich mit dem Auswahl-Dropdown...

Konfigurieren Sie ein Implementierungsbeispiel für den Mysql-Master-Slave-Dienst

Konfigurieren Sie ein Implementierungsbeispiel fü...

Alibaba Cloud Centos7.3-Installation, MySQL5.7.18 RPM-Installations-Tutorial

Deinstallieren Sie MariaDB CentOS7 installiert st...

Zusammenfassung der wichtigsten Wissenspunkte zur MySQL-Abfrageoptimierung

Vorwort Abfrageoptimierung ist nichts, was über N...

Mysql implementiert drei Funktionen zum Feldspleißen

Beim Exportieren von Daten in Operationen ist das...

Analyse des rel-Attributs in HTML

.y { background: url(//img.jbzj.com/images/o_y.pn...

Installieren Sie Linux mithilfe einer virtuellen VMware-Maschine (CentOS7-Image).

1. VMware herunterladen und installieren Verknüpf...

Implementierung der Vue-Nuxt-Anmeldeauthentifizierung

Inhaltsverzeichnis einführen Link Start Gehen Sie...

Anwendung von CSS3-Animationseffekten in Aktivitätsseiten

Hintergrund Ehe wir uns versehen, neigt sich ein ...

Detailliertes Tutorial zur Installation von MySQL 8.0.12 unter Windows

In diesem Artikel finden Sie eine ausführliche An...

Detaillierte Erklärung gängiger Docker-Befehle

1. Hilfe-Befehl 1. Aktuelle Docker-Version anzeig...