Mehrere Zeilen wenn Subquery als Ausdruck
Hallo,
ich habe folgende Tabellen:
aufträge: id, bezeichnung
auftragpersonal: id, auftragid, personalid, einheiten
abrechnung: id, auftragpersonalid, einheiten, datum
über auftragpersonal wird personal aufträgen zugeteilt und das für =
x
einheiten.
in der tabelle abrechnung können sich zu einem personal-auftrag mapping=
mehrere abrechnungseinträge finden, damit kann eine teilabrechnung fü=
r
das personal abgebildet werden. am ende müssen die summe der einheiten
in abrechnung immer gleich der betreffenden einheiten anzahl in
auftragpersonal sein.
Ist es irgendwie möglich sämtliche aufträge für eine bestimmte
personalid herauszusuchen, wo einheiten größer ist als die summe der
teilabrechnungen ist? also wo noch nicht alles abgerechnet ist....
folgendes funktioniert nicht, weil die subquery nicht mehr als eine
zeile haben darf (FEHLER: als Ausdruck verwendete Unteranfrage ergab
mehr als eine Zeile):
select aufträge.id, aufträge.bezeichnung from aufträge inner join
auftragpersonal on aufträge.id=3Dauftragpersonal.auftragid where
personalid=3Dx AND auftragpersonal.einheiten > (select
SUM(abrechnung.einheiten) from abrechnung group by auftragpersonalid);
Gibt es dafür auf Datenbankebene überhaupt eine Lösung?
MfG,
Michael
--
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein [at] postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
Re: Mehrere Zeilen wenn Subquery als Ausdruck
Michael Prochaska <michael [at] prochas.net> wrote:
> [...]
> folgendes funktioniert nicht, weil die subquery nicht mehr
> als eine zeile haben darf (FEHLER: als Ausdruck verwendete
> Unteranfrage ergab mehr als eine Zeile):
> select aufträge.id, aufträge.bezeichnung from aufträge inner
> join auftragpersonal on
> aufträge.id=3Dauftragpersonal.auftragid where personalid=3Dx AND
> auftragpersonal.einheiten > (select
> SUM(abrechnung.einheiten) from abrechnung group by
> auftragpersonalid);
> Gibt es dafür auf Datenbankebene überhaupt eine Lösung?
Du musst in dem Subselect auf =DCbereinstimmung mit der über-
geordneten Abfrage prüfen, also (ungetestet) "WHERE [...]
AND auftragpersonal.einheiten > (SELECT
SUM(abrechnung.einheiten) FROM abrechnung WHERE
auftragpersonalid =3D auftragpersonal.id)".
Tim
P. S.: Sorry für die doppelte Mail.
--
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein [at] postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
Re: Mehrere Zeilen wenn Subquery als Ausdruck
Das wars, danke!
MfG,
Michael
Tim Landscheidt schrieb:
> Michael Prochaska <michael [at] prochas.net> wrote:
>
>
>> [...]
>> folgendes funktioniert nicht, weil die subquery nicht mehr
>> als eine zeile haben darf (FEHLER: als Ausdruck verwendete
>> Unteranfrage ergab mehr als eine Zeile):
>> select aufträge.id, aufträge.bezeichnung from aufträge inner
>> join auftragpersonal on
>> aufträge.id=3Dauftragpersonal.auftragid where personalid=3Dx AND
>> auftragpersonal.einheiten > (select
>> SUM(abrechnung.einheiten) from abrechnung group by
>> auftragpersonalid);
>>
>
>
>> Gibt es dafür auf Datenbankebene überhaupt eine Lösung?
>>
>
> Du musst in dem Subselect auf =DCbereinstimmung mit der über-
> geordneten Abfrage prüfen, also (ungetestet) "WHERE [...]
> AND auftragpersonal.einheiten > (SELECT
> SUM(abrechnung.einheiten) FROM abrechnung WHERE
> auftragpersonalid =3D auftragpersonal.id)".
>
> Tim
>
> P. S.: Sorry für die doppelte Mail.
>
>
--
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein [at] postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
Re: Mehrere Zeilen wenn Subquery als Ausdruck
Hallo nochmal, zu früh gefreut....
Damit bekomme ich leider nur jene Aufträge, zu denen es schon Einträg=
e
gibt in der Abrechnungstabelle. Ich brauche also praktisch eine Left
Join Funktionalität für die Beziehung zwischen Haupt Query und Sub
Query, oder?
MfG,
Michael
Michael Prochaska schrieb:
> Das wars, danke!
>
> MfG,
> Michael
>
> Tim Landscheidt schrieb:
>> Michael Prochaska <michael [at] prochas.net> wrote:
>>
>>
>>> [...]
>>> folgendes funktioniert nicht, weil die subquery nicht mehr
>>> als eine zeile haben darf (FEHLER: als Ausdruck verwendete
>>> Unteranfrage ergab mehr als eine Zeile):
>>> select aufträge.id, aufträge.bezeichnung from aufträge inner
>>> join auftragpersonal on
>>> aufträge.id=3Dauftragpersonal.auftragid where personalid=3Dx AND
>>> auftragpersonal.einheiten > (select
>>> SUM(abrechnung.einheiten) from abrechnung group by
>>> auftragpersonalid);
>>>
>>
>>
>>> Gibt es dafür auf Datenbankebene überhaupt eine Lösung?
>>>
>>
>> Du musst in dem Subselect auf =DCbereinstimmung mit der über-
>> geordneten Abfrage prüfen, also (ungetestet) "WHERE [...]
>> AND auftragpersonal.einheiten > (SELECT
>> SUM(abrechnung.einheiten) FROM abrechnung WHERE
>> auftragpersonalid =3D auftragpersonal.id)".
>>
>> Tim
>>
>> P. S.: Sorry für die doppelte Mail.
>>
>>
>
>
--
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein [at] postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
Re: Mehrere Zeilen wenn Subquery als Ausdruck
Michael Prochaska <michael [at] prochas.net> wrote:
> Hallo nochmal, zu früh gefreut....
> Damit bekomme ich leider nur jene Aufträge, zu denen es
> schon Einträge gibt in der Abrechnungstabelle. Ich brauche
> also praktisch eine Left Join Funktionalität für die
> Beziehung zwischen Haupt Query und Sub Query, oder?
Das Problem ist ein anderes: Wenn keine Datensätze vorhanden
sind, gibt SUM() in dem Subselect NULL zurück, das dann über
"AND $IRGENDWAS > NULL" immer für ein Fehlschlagen der
WHERE-Klausel in der Hauptabfrage sorgt. Wenn Du
"SUM(abrechnung.einheiten)" durch
"COALESCE(SUM(abrechnung.einheiten), 0)" ersetzt (oder das
COALESCE() um das Subselect schreibst), sollte es funktio-
nieren (ungetestet).
Tim
--
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein [at] postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein