Mehrere SELECTs an einer Spalte durchführen

exzel

Datenbank-Guru
Beiträge
170
Hallo zusammen,

ich habe drei SELECT Abfragen. Jeder dieser SELECT Abfragen ließt die gleiche Spalte aus und führt an dem Inhalt eine Änderung mit REPLACE, SUBSTRING_INDEX etc. durch. Die Ergebnisse sollen dann jeweils in drei neuen Spalte dargestellt werden. Über SELECT UNION wird leider nur der Alias, der ersten Spalte verwendet. Die Aliase der beiden anderen Spalten fallen weg.

Das sind die einzelnen Befehle

Code:
SELECT REPLACE(SUBSTRING_INDEX(Spalte, '%', 1), '~' , ' ') as Oberpunkt FROM Tabelle;

Code:
SELECT DISTINCT REPLACE(REPLACE(TRIM(LEADING SUBSTRING_INDEX(REPLACE(Spalte, '%%%', '%(Nicht kategorisiert)%'), '%', 1)
FROM SUBSTRING_INDEX(REPLACE(Spalte, '%%%', '%(Nicht kategorisiert)%'), '%', 2)), '%', ' '), '~' , ' ')
as Unterpunkt FROM Tabelle;

Code:
SELECT DISTINCT REPLACE(REPLACE(TRIM(LEADING SUBSTRING_INDEX(REPLACE(Spalte, '%%%', '%(Nicht kategorisiert)%'), '%', 2)
FROM SUBSTRING_INDEX(REPLACE(Spalte, '%%%', '%(Nicht kategorisiert)%'), '%', 3)), '%', ' '), '~' , ' ')
as Unterunterpunkt FROM Tabelle;


Aber wie kann ich diese Abfragen zu einer zusammensetzen?

Gruß
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.160
Hallo zusammen,

ich habe drei SELECT Abfragen. Jeder dieser SELECT Abfragen ließt die gleiche Spalte aus und führt an dem Inhalt eine Änderung mit REPLACE, SUBSTRING_INDEX etc. durch. Die Ergebnisse sollen dann jeweils in drei neuen Spalte dargestellt werden.

Aber wie kann ich diese Abfragen zu einer zusammensetzen?

Gruß


select bla(spalte) as bla, foo(spalte) as foo, blub(spalte) as blub from table
 

ukulele

Datenbank-Guru
Beiträge
4.409
Code 2 und 3 haben bei mir Syntaxfehler und enthalten 2x FROM. Ist das richtig so?

Generell kannst du mit
Code:
SELECT    DISTINCT
        spalte AS wertA,
        spalte AS wertB,
        spalte AS wertC
FROM    tabelle
natürlich verschiedene Funktionen auf die selbe Spalte in unterscheidliche Spalten bringen. Allerdings wird sich das DISTINCT auf alle "Varianten" auswirken. Sollte aber kein Problem sein wenn wirklich immer die gleiche Spalte als Ausgangsinformation dient.
 

exzel

Datenbank-Guru
Beiträge
170
Hallo und danke für die Antworten,

@ukulele das erste FROM ist Bestandteil des Befehls

SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
-> 'barxxx'

@akretschmer

Ich verstehe nicht was die Begriffe vor den Klammern darstellen sollen.

select bla(spalte) as bla, foo(spalte) as foo, blub(spalte) as blub from table


Die Werte in in den Spalten sind die Spaltennamen selbst und die Begriffe nach as sind die Aliase.

Was bedeutet bla, foo oder blub?

Gruß
 

akretschmer

Datenbank-Guru
Beiträge
9.160
@akretschmer

Ich verstehe nicht was die Begriffe vor den Klammern darstellen sollen.

select bla(spalte) as bla, foo(spalte) as foo, blub(spalte) as blub from table

Funktionen. Da ich cronisch faul bin, habe ich Deine Funktionsaufrufe nicht übernommen. Du wolltest mit unterschiedlichen Funktionen auf einer Spalte 3 Ergebnisspalten erzeugen. Zumindest hab ich Dich so verstanden. bla(), foo() und blub() sind Deine Funktionen, da Deine wirklichen reinzusetzen überlasse ich Dir zur Übung.
 
Werbung:

exzel

Datenbank-Guru
Beiträge
170
Hallo! Der Vollständigkeit halber hier die zusammenfassung zu einer großen Abfrage

Code:
(SELECT
DISTINCT
REPLACE(SUBSTRING_INDEX(Spalte , '%', 1), '~' , ' ')
AS Kategorie1,
REPLACE(REPLACE(TRIM(LEADING SUBSTRING_INDEX(REPLACE(Spalte, '%%%', '%(Nicht kategorisiert)%'), '%', 1)
FROM SUBSTRING_INDEX(REPLACE(Spalte, '%%%', '%(Nicht kategorisiert)%'), '%', 2)), '%', ' '), '~' , ' ')
as Kategorie2,
REPLACE(REPLACE(TRIM(LEADING SUBSTRING_INDEX(REPLACE(Spalte, '%%%', '%(Nicht kategorisiert)%'), '%', 2)
FROM SUBSTRING_INDEX(REPLACE(Spalte, '%%%', '%(Nicht kategorisiert)%'), '%', 3)), '%', ' '), '~' , ' ')
as Kategorie3,
REPLACE(REPLACE(TRIM(LEADING SUBSTRING_INDEX(REPLACE(Spalte, '%%%', '%(Nicht kategorisiert)%'), '%', 3)
FROM SUBSTRING_INDEX(REPLACE(Spalte, '%%%', '%(Nicht kategorisiert)%'), '%', 4)), '%', ' '), '~' , ' ')
as Kategorie4
FROM tabelle1)
UNION
(SELECT
category1,
category2,
category3,
category4
FROM tabelle2)
ORDER BY Kategorie1 ASC;
 
Oben