Join zweier Abfragen mit zweiter Ergebnisspalte
Join zweier Abfragen mit zweiter Ergebnisspalte
am 04.08.2006 15:16:47 von mat
Hallo zusammen,
ich stehe momentan vor folgendem Problem:
Es gibt zwei SQL Abfragen die bis auf eine Spalte identisch sind, z.B.
Abfrage 1: SELECT Spalte1, Spalte2, Anzahl1 FROM ... WHERE ... GROUP
Abfrage 2: SELECT Spalte1, Spalte2, Anzahl2 FROM ... WHERE ... GROUP
Wie könnte ich diese beiden Abfragen vereinen, damit das Ergebnis die
Struktur,
Spalte1, Spalte2, Anzahl1, Anzahl2
besitzt?
Gibt es eine einfachere Möglichkeit als vielleicht INNER JOINs auf
temporäre Tabellen.
Danke schonmal und ein schönes WE ,
Matthias
Re: Join zweier Abfragen mit zweiter Ergebnisspalte
am 04.08.2006 15:27:05 von Thomas Rachel
Mat wrote:
^^^?
> ich stehe momentan vor folgendem Problem:
> Es gibt zwei SQL Abfragen die bis auf eine Spalte identisch sind, z.B.
>
> Abfrage 1: SELECT Spalte1, Spalte2, Anzahl1 FROM ... WHERE ... GROUP
> Abfrage 2: SELECT Spalte1, Spalte2, Anzahl2 FROM ... WHERE ... GROUP
>
> Wie könnte ich diese beiden Abfragen vereinen, damit das Ergebnis die
> Struktur,
>
> Spalte1, Spalte2, Anzahl1, Anzahl2
>
> besitzt?
Indem Du SELECT Spalte1, Spalte2, Anzahl2 FROM ... WHERE ... schreibst?
(Was das GROUP oben soll, weià ich nicht - meintest Du vielleicht GROUP
BY ...?)
Das geht natürlich nur dann, wenn die Abfragen ansonsten wirklich gleich
sind.
> Gibt es eine einfachere Möglichkeit als vielleicht INNER JOINs auf
> temporäre Tabellen.
Das kommt auf die Tabellenstruktur an. Wenn Du sie uns verrätst, kannst Du
evtl. nähere Hinweise bekommen.
Thomas
--
Die eXtensible HyperText Markup Language, XHTML 1.0, verbindet das alte, auf
reinem HTML basierenden Internet mit dem neuen Internet, das auf der
detaillierten Spezifikation der W3C XHTML 1.0-Arbeitsgruppe basiert.
(Hilfedatei von Opera)
Re: Join zweier Abfragen mit zweiter Ergebnisspalte
am 04.08.2006 15:28:36 von thborsdorf
Hallo Mat!
Mat schrieb am 04.08.2006 15:16:
> Es gibt zwei SQL Abfragen die bis auf eine Spalte identisch sind, z.B.
> [...]
> Wie könnte ich diese beiden Abfragen vereinen, damit das Ergebnis die
> Struktur Spalte1, Spalte2, Anzahl1, Anzahl2 besitzt?
Hä?
Verstehe ich das richtig: Sowohl "Spalte1" als auch "Spalte2", "Anzahl1"
und "Anzahl2" befinden sich in derselben Tabelle?
Wo ist dann dein Problem???
Oder sind "Anzahl1" und "Anzahl2" Aggregat-Felder? Dann wäre es
hilfreich, wenn du die kompletten Statements posten würdest.
> Matthias
MfG Thomas.
Re: Join zweier Abfragen mit zweiter Ergebnisspalte
am 08.08.2006 10:52:57 von mat
Hallo,
ihr habt natürlich Recht, die Frage war nicht genau genug.
Folgende Situation:
Ich habe eine Tabelle mit Artikeln. Für jeden Artikel gibt es (neben
vielen anderen) die Attribute "Preis" und "Währung" (EUR, USD...).
Dh. ein Artikel mit mehreren Währungen steht in mehreren Zeilen der
Tabelle, also einmal mit USD, EUR, ...
Tabelle (alte Artikelliste): Artikelnummer, ..., Preis, Währung
Ich würde nun gerne eine Abfrage schreiben, die mir alle Artikel
zurückgibt, und für jeden Artikel eine Spalte EUR-Preis, USD-Preis,
... bereitstellt.
Dann wäre kein Artikel aufgrund des Währungsattribut mehrfach
vorhanden.
neue Artikelliste: Artikelnummer, ..., Preis-Eur, Preis-Usd, Preis-XXX
Wie könnte eine solche Abfrage aussehen??
Danke und Grüße,
Matthias
Thomas Rachel schrieb:
> Mat wrote:
> ^^^?
>
> > ich stehe momentan vor folgendem Problem:
> > Es gibt zwei SQL Abfragen die bis auf eine Spalte identisch sind, z.B.
> >
> > Abfrage 1: SELECT Spalte1, Spalte2, Anzahl1 FROM ... WHERE ... GROUP
> > Abfrage 2: SELECT Spalte1, Spalte2, Anzahl2 FROM ... WHERE ... GROUP
> >
> > Wie könnte ich diese beiden Abfragen vereinen, damit das Ergebnis die
> > Struktur,
> >
> > Spalte1, Spalte2, Anzahl1, Anzahl2
> >
> > besitzt?
>
> Indem Du SELECT Spalte1, Spalte2, Anzahl2 FROM ... WHERE ... schreibst?
> (Was das GROUP oben soll, weiß ich nicht - meintest Du vielleicht GROUP
> BY ...?)
>
> Das geht natürlich nur dann, wenn die Abfragen ansonsten wirklich gleich
> sind.
>
>
> > Gibt es eine einfachere Möglichkeit als vielleicht INNER JOINs auf
> > temporäre Tabellen.
>
> Das kommt auf die Tabellenstruktur an. Wenn Du sie uns verrätst, kannst=
Du
> evtl. nähere Hinweise bekommen.
>
> Thomas
> --
> Die eXtensible HyperText Markup Language, XHTML 1.0, verbindet das alte, =
auf
> reinem HTML basierenden Internet mit dem neuen Internet, das auf der
> detaillierten Spezifikation der W3C XHTML 1.0-Arbeitsgruppe basiert.
> (Hilfedatei von Ope=
ra)
Re: Join zweier Abfragen mit zweiter Ergebnisspalte
am 09.08.2006 08:56:56 von Thomas Rachel
Mat wrote:
^^^?, immer noch.
> Hallo,
> Folgende Situation:
> Ich habe eine Tabelle mit Artikeln. Für jeden Artikel gibt es (neben
> vielen anderen) die Attribute "Preis" und "Währung" (EUR, USD...).
> D.h. ein Artikel mit mehreren Währungen steht in mehreren Zeilen der
> Tabelle, also einmal mit USD, EUR, ...
Das ist schlecht - wenn es derselbe Artikel ist, hältst Du die anderen
Spalten redundant mit Gefahr einer - wie heiÃt das? Update-Anomalie,
glaube ich.
Besser wäre ein Auslagern des Preises samt Währung in eine eigene
Tabelle, also Artikel-Nr,Preis,Währung.
In beiden Fällen geht das, was Du vorhast, so nicht. Ich sehe da drei
Möglichkeiten:
1. Sortieren nach Artikelnummer und applikationsseitiges Zusammendröseln,
d.h. Nacheinander-einlesen der verschiedenen Preise.
2. Applikationsseitiges Abfragen der verschiedenen möglichen Währungen
und darauf aufbauend automatische Teilgenerierung des SQL-Strings.
Wenn Du bspw. die Währungen EUR und USD drin hast, sollte ein Query
herauskommen wie
SELECT DISTINCT (andere benötigte Spalten), whg_EUR.preis, whg_USD.preis
from tabelle
LEFT JOIN tabelle AS whg_EUR ON tabelle.artikel_id=whg_EUR.artikel_id AND
whg_EUR.waehrung='EUR'
LEFT JOIN tabelle AS whg_EUR ON tabelle.artikel_id=whg_USD.artikel_id AND
whg_USD.waehrung='USD'
....
Das DISTINCT ist wegen Mehrfachhaltung Deiner Daten, bei der oben
vorgeschlagenen Normalisierung entfällt das.
3. wäre noch ein GROUP_CONCAT möglich, aber hier wäre die spätere
Auswertung etwas schwierig:
SELECT ...,GROUP_CONCAT(concat(preis,waehrung)) FROM tabelle GROUP BY
artikel_id
Das sind dann keine separate Spalten, sondern eine komma-separierte Liste
von Preis-Währungs-Strings.
> Danke und GrüÃe,
> Matthias
>
> Thomas Rachel schrieb:
>
>> Mat wrote:
>> ^^^?
Bitte kein TOFU: http://learn.to/quote
Thomas
--
Diese Signatur ist sinnfrei, aber korrekt abgetrennt.
Zwei Minuszeichen, gefolgt von einem Leerzeichen, machten dies möglich.
Re: Join zweier Abfragen mit zweiter Ergebnisspalte
am 09.08.2006 16:16:55 von mat
Danke !!
ich muss deine Ideen mal ausprobieren.
Leider ist die Datehaltung nicht besonders normalisiert. Das würde
sonst einiges erleichtern.
viele Grüße,
Matthias