mehrere Selects in einer Query

Shooter2k

Erfahrenes Mitglied
Hallo liebes Forum,
ich habe eine Frage bezüglich mehrerer Selects in einer Query.

Ich möchte diese 3 Querys verbinden, weis aber nicht genau wie ich das anstellen soll.

Code:
SELECT b.name as Montag FROM `woche` a INNER JOIN gerichte b ON a.gerichte_id = b.id WHERE a.wochen_id = 11 AND a.tag_nr = 1

SELECT b.name as Dienstag FROM `woche` a INNER JOIN gerichte b ON a.gerichte_id = b.id WHERE a.wochen_id = 11 AND a.tag_nr = 2

SELECT b.name as Mittwoch FROM `woche` a INNER JOIN gerichte b ON a.gerichte_id = b.id WHERE a.wochen_id = 11 AND a.tag_nr = 3

tag_nr steht für den Wochentag. Bei der Ausgabe sollte dann eigentlich Montag, Dienstag, Mittwoch stehen. Und dann jeweils die Gerichtenamen dazu.

Vielen Dank für die Hilfe

Gruß
Shooter
 
z.B. so
SQL:
SELECT 'Montag' AS tag, b.name FROM `woche` a INNER JOIN gerichte b ON a.gerichte_id = b.id WHERE a.wochen_id = 11 AND a.tag_nr = 1
union all
SELECT 'Dienstag' AS tag, b.name FROM `woche` a INNER JOIN gerichte b ON a.gerichte_id = b.id WHERE a.wochen_id = 11 AND a.tag_nr = 2
union all
SELECT 'Mittwoch' AS tag, b.name FROM `woche` a INNER JOIN gerichte b ON a.gerichte_id = b.id WHERE a.wochen_id = 11 AND a.tag_nr = 3
;
 
Vielen Dank für deine Antwort. Funktioniert prima. Ist es auch möglich, die Wochentage als Spalte zu verwenden? Statt Spalte "Tag"? Pro Wochentag können es unterschiedlich viele Gerichte geben.
 
z.B. so
SQL:
SELECT b.name AS 'Montag', null AS 'Dienstag', null AS 'Mittwoch' FROM `woche` a INNER JOIN gerichte b ON a.gerichte_id = b.id WHERE a.wochen_id = 11 AND a.tag_nr = 1
union all
SELECT null, b.name, null FROM `woche` a INNER JOIN gerichte b ON a.gerichte_id = b.id WHERE a.wochen_id = 11 AND a.tag_nr = 2
union all
SELECT null, null, b.name FROM `woche` a INNER JOIN gerichte b ON a.gerichte_id = b.id WHERE a.wochen_id = 11 AND a.tag_nr = 3
;

Aber dann hast du halt viele 'löcher'. Denke nicht dass dies ist was du suchst. Weil deine Anzahl Gerichte pro Tag auch unterschiedlich ist, fällt mir aber auch keine bessere Lösung ein.
 
Moin Shooter24,

vielleicht habe ich es nur überlesen, aber... um welche DB geht es denn?

Weil.. einige seriöse DBs haben für diesen Sachverhalt doch schon vergeferigte PIVOT/UNPIVOT-Funktionalitäten, zB Oracle.

Wenn wir also nicht gerade von einer MS-Access-"Datenbank" sprechen, dann brauchen wir doch nicht solche Räder neu erfinden.

Grüße
Biber
 
@Biber3
Auch wenn es Oracle wäre würde dir das nichts nützen. PIVOT ist eine Aggregatsfunktion. Dh. man muss gezwungenermassen auf einer Spalte eine Aggregation machen und auf einer anderen gruppieren.
Das trifft aber hier bei seinem Problem nicht zu. Es handelt sich lediglich um verscheiden lange Listen. Da gibt es nichts zu aggregieren...
 
@BaseBallBatBoy

Hmmm, da lese ich die Aufgabe aber etwas anders...

Pro Wochentag können es unterschiedlich viele Gerichte geben.

Ich lese daraus: für diese Query mit der Woche_id = 11, die nun mal Montag, Dienstag, ...Freitag hat, gibt es
- das Gericht "Amtsgericht" am Montag und/oder Dienstag und/oder Mittwoch ...
- das Gericht "Bezirksgericht" am Montag und/oder Dienstag und/oder Mittwoch ...

-> Aus vorher 7 Detail-Datensätzen mit "Amtsgericht"/"Bezirksgericht" werden jetzt 2 Zeilen.
Das ist für mich ein GROUP BY (gerichte_id).

Und natürlich kann es am Dienstag - auch bei einer Pivotierung- mehrere Gerichte geben - why not?

Schlussfolgerung: Dann haben ich oder du oder wir beide die Aufgabe falsch verstanden. ;-)

Grüße
Biber
 
Das nimmst jetzt du an, dass es sich hier um Gerichte aka ein Organ der Rechtsprechung handelt. Es könnte sich auch um Gerichte aka eine Speise handeln und man will wissen an welchem Tag es was auf den Tisch gibt.
Einfache Antwort, wir wissen es nicht. Das kann uns nur der OP sagen.

Der OP hat aber in der ersten Query geschrieben:
SELECT b.name ....

Das ist für mich eine einfache Auflistung der Namen dieser Gerichte. Man ist also an den Namen interessiert. Und offenbar nicht an einem Count. Aber wie gesagt sind das alles Mutmassungen...
 
@BaseBallBatBoy
[OffTopic]
Das nimmst jetzt du an, dass es sich hier um Gerichte aka ein Organ der Rechtsprechung handelt.

Ja nee, das was auch nur ein Scherz - ich gehe auch von einem Speiseplan aus... ;-)

Ansonsten FULL ACK... möge der TO mal einen Beispiel-Output malen.

Grüße
Biber
[/OffTopic]
 
Zurück