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
Michael Prochaska [ Mi, 17 Dezember 2008 22:41 ] [ ID #1981393 ]

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
Tim Landscheidt [ Mi, 17 Dezember 2008 23:41 ] [ ID #1981394 ]

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
Michael Prochaska [ Do, 18 Dezember 2008 00:26 ] [ ID #1981543 ]

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
Michael Prochaska [ Do, 18 Dezember 2008 01:46 ] [ ID #1981544 ]

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
Tim Landscheidt [ Do, 18 Dezember 2008 03:34 ] [ ID #1981545 ]
Datenbanken » gmane.comp.db.postgresql.german » Mehrere Zeilen wenn Subquery als Ausdruck

Vorheriges Thema: == WöchentlicherPostgreSQL Newsletter - 21.Dezember 2008
Nächstes Thema: == WöchentlicherPostgreSQL Newsletter - 14.Dezember 2008