Heim > Datenbank > MySQL-Tutorial > Wie kann man eine durch Kommas getrennte VARCHAR-Spalte in SQL effizient aufteilen und filtern?

Wie kann man eine durch Kommas getrennte VARCHAR-Spalte in SQL effizient aufteilen und filtern?

DDD
Freigeben: 2024-12-24 17:48:12
Original
178 Leute haben es durchsucht

How to Efficiently Split and Filter a Comma-Separated VARCHAR Column in SQL?

Aufteilen einer VARCHAR-Spalte in mehrere Werte in SQL

Der VARCHAR-Datentyp in SQL ermöglicht die Speicherung von Zeichendaten variabler Länge. Oft ist es notwendig, eine VARCHAR-Spalte in mehrere Werte aufzuteilen, um die Datenfilterung oder andere Vorgänge zu erleichtern.

Betrachten Sie das folgende Beispiel:

SELECT 
  AD_Ref_List.Value
FROM AD_Ref_List
WHERE AD_Ref_List.AD_Reference_ID= 1000448
Nach dem Login kopieren

Diese Abfrage ruft eine Spalte mit dem Namen „Wert“ ab. aus der Tabelle „AD_Ref_List“, wobei die Spalte „AD_Reference_ID“ gleich 1000448 ist. Das Ergebnis ist eine Liste von Werte:

CO,VO
Nach dem Login kopieren

Die Anforderung besteht jedoch darin, die Ergebnisse basierend auf Werten einzuschränken, die in einer anderen Tabelle „xx_insert“ gespeichert sind:

SELECT xx_insert.XX_DocAction_Next
  FROM xx_insert
  WHERE xx_insert_id = 1000283
Nach dem Login kopieren

Das Ergebnis dieser Abfrage ist:

CO
Nach dem Login kopieren

Die Herausforderung besteht darin, die ursprüngliche Abfrage so zu ändern, dass sie die Werte aus „xx_insert“ einbezieht und gleichzeitig das durch Kommas getrennte Format beibehält. Beim ersten Versuch wurden die Werte in eine durch Trennzeichen getrennte Zeichenfolge umgewandelt:

AD_Ref_List.Value IN ('CO,VO')
Nach dem Login kopieren

Was nicht das gewünschte Ergebnis ist.

Lösung:

Um dieses Problem zu beheben Bei diesem Problem sollten die Werte in der IN-Klausel mit dem entsprechenden Trennzeichen umschlossen und anhand einer durch Kommas getrennten Liste überprüft werden, die ebenfalls in eingeschlossen ist Trennzeichen:

SELECT r.Value
FROM   AD_Ref_List r
       INNER JOIN xx_insert x
       ON ( ',' || x.XX_DocAction_Next || ',' LIKE '%,' || r.value || ',%' )
WHERE  r.AD_Reference_ID = 1000448
AND    x.xx_insert_id    = 1000283;
Nach dem Login kopieren

Diese Technik ermöglicht die Identifizierung von Werten, die mit der durch Kommas getrennten Liste übereinstimmen. Alternativ kann auch ein effizienterer Ansatz mit Zeilenwertfilterung verwendet werden:

SELECT Value
FROM   AD_Ref_List
WHERE  AD_Reference_ID = 1000448
AND    value IN (
  SELECT REGEXP_SUBSTR( XX_DocAction_Next, '[^,]+', 1, LEVEL )
  FROM   xx_insert
  WHERE  xx_insert_id    = 1000283
  CONNECT BY LEVEL <= REGEXP_COUNT( XX_DocAction_Next, '[^,]+' )
);
Nach dem Login kopieren

Beide Lösungen teilen die VARCHAR-Spalte effektiv in mehrere Werte auf und filtern basierend auf den angegebenen Werten, wodurch das bei der ersten Lösung aufgetretene Problem behoben wird Abfrage.

Das obige ist der detaillierte Inhalt vonWie kann man eine durch Kommas getrennte VARCHAR-Spalte in SQL effizient aufteilen und filtern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage