Thread View: de.comp.datenbanken.misc
4 messages
4 total messages
Started by Mike Pfaff
Mon, 11 Jun 2001 09:36
Richtige L�sung einer Pr�fungsaufgabe?
Author: Mike Pfaff
Date: Mon, 11 Jun 2001 09:36
Date: Mon, 11 Jun 2001 09:36
63 lines
2871 bytes
2871 bytes
Hallo zusammen
Ich habe eine Meinungsverschiedenheit mit meinem Datenbank-Dozenten
betreffend der richtigen L�sung einer Pr�fungsaufgabe. Unten seht ihr die
Datenbankstruktur und die beiden L�sungen. Mir ist nicht klar, was an meiner
L�sung falsch sein soll. Der Dozent behauptet, das funktioniere so nicht mit
Subqueries hinter dem FROM(Steht aber so im Referenz-Manual, das er uns
abgegeben hat) und das sei sowieso nicht behandelt worden.
Ich w�re froh, wenn mir ein Spezialist aus dieser Newsgroup entweder die
Richtigkeit meiner L�sung best�tigen k�nnte oder mir darlegen k�nnte, was
ich falsch gemacht habe.
Vielen Dank im voraus,
Mike Pfaff
Datenbanksystem:
----------------
Oracle
Tabellen:
---------
Kunde: nummer, name, vorname, adresse
Bestellung: nummer, datum, k_nummer
Bestellposten: b_nummer, a_code, menge
Artikel: code, bezeichnung
Fremdschl�ssel:
---------------
Bestellung.k_nummer (zu Kunde.nummer)
Bestellposten.b_nummer (zu Bestellung.nummer)
Bestellposten.a_code (zu Artikel.code)
Meine L�sung:
-------------
SELECT code, bezeichnung, summe
FROM
(
SELECT code, bezeichnung, SUM(menge) AS summe
FROM
(
SELECT code, bezeichnung, datum, menge
FROM Bestellung, Bestellposten, Artikel
WHERE code = a_code
AND Bestellung.nummer = Bestellposten.b_nummer
)
WHERE datum BETWEEN
TO_DATE('1.1.1999','dd.mm.yyyy') AND TO_DATE('31.12.1999','dd.mm.yyyy')
GROUP BY code
)
ORDER BY summe DESC;
Muster-L�sung:
--------------
SELECT code, bezeichnung, SUM(menge)
FROM Artikel a, Bestellposten p, Bestellung b
WHERE a.code = p.a_code
AND p.b_nummer = b.nummer
AND datum BETWEEN
TO_DATE('1.1.1999','dd.mm.yyyy') AND TO_DATE('31.12.1999','dd.mm.yyyy')
GROUP BY code, bezeichnung
ORDER BY 3 DESC;
Re: Richtige Lösung einer Prüfungsaufgabe?
Author: Ulrik Hoffmann
Date: Mon, 11 Jun 2001 09:49
Date: Mon, 11 Jun 2001 09:49
26 lines
2105 bytes
2105 bytes
"Mike Pfaff" <blacklotus@datacomm.ch> schrieb im Newsbeitrag news:9g239e$6o5qb$1@ID-86276.news.dfncis.de... > Ich habe eine Meinungsverschiedenheit mit meinem Datenbank-Dozenten > betreffend der richtigen L�sung einer Pr�fungsaufgabe. Unten seht ihr die > Datenbankstruktur und die beiden L�sungen. Mir ist nicht klar, was an meiner > L�sung falsch sein soll. Der Dozent behauptet, das funktioniere so nicht mit > Subqueries hinter dem FROM(Steht aber so im Referenz-Manual, das er uns > abgegeben hat) und das sei sowieso nicht behandelt worden. > [SQL gesnippt] Hallo Mike, Deine L�sung ist nicht falsch, aber alles andere als elegant. Dein �u�erstes SQL-Statement ist �berfl�ssig. Ich w�rde das auch immer so wie der Prof. machen. Abgesehen davon funktionieren Subqueries beweisbar nach dem "from" in Oracle sehr gut. Viel Spa� bei der Auseinandersetzung mit dem Prof. Gru� Ulrik
Re: Richtige Lösung einer Prüfungsaufgabe?
Author: Ulrik Hoffmann
Date: Mon, 11 Jun 2001 10:02
Date: Mon, 11 Jun 2001 10:02
121 lines
4592 bytes
4592 bytes
"Ulrik Hoffmann" <ulrik.peer@hoffmann-kiel.de> schrieb im Newsbeitrag
news:9g247b$6kjq5$1@ID-13717.news.dfncis.de...
>
> > Ich habe eine Meinungsverschiedenheit mit meinem Datenbank-Dozenten
> > betreffend der richtigen L�sung einer Pr�fungsaufgabe. Unten seht ihr
die
> > Datenbankstruktur und die beiden L�sungen. Mir ist nicht klar, was an
> meiner
> > L�sung falsch sein soll. Der Dozent behauptet, das funktioniere so nicht
> mit
> > Subqueries hinter dem FROM(Steht aber so im Referenz-Manual, das er uns
> > abgegeben hat) und das sei sowieso nicht behandelt worden.
> >
> [SQL gesnippt]
> Deine L�sung ist nicht falsch, aber alles andere als elegant. Dein
�u�erstes
> SQL-Statement ist �berfl�ssig. Ich w�rde das auch immer so wie der Prof.
> machen. Abgesehen davon funktionieren Subqueries beweisbar nach dem "from"
> in Oracle sehr gut.
Leider ist Deine L�ung doch falsch: es liegt an der falschen Group by
Expression, nicht an den Selects nach dem From:
Protokoll:
SQL> create table kunde(
2 Kunde varchar2(100),
3 name varchar2(100),
4 vorname varchar2(100),
5 adresse varchar2(100));
Tabelle wurde angelegt.
SQL> create table
2 Bestellung
3 ( nummer varchar2(100),
4 datum date,
5 k_nummer varchar2(100))
6 ;
Tabelle wurde angelegt.
SQL> create table
2 Bestellposten
3 (b_nummer varchar2(100),
4 a_code varchar2(100),
5 menge varchar2(100))
6 ;
Tabelle wurde angelegt.
SQL> create table Artikel
2 (code varchar2(100),
3 bezeichnung varchar2(100));
Tabelle wurde angelegt.
SQL> SELECT code, bezeichnung, summe
2 FROM
3 (
4 SELECT code, bezeichnung, SUM(menge) AS summe
5 FROM
6 (
7 SELECT code, bezeichnung, datum, menge
8 FROM Bestellung, Bestellposten, Artikel
9 WHERE code = a_code
10 AND Bestellung.nummer = Bestellposten.b_nummer
11 )
12 WHERE datum BETWEEN
13 TO_DATE('1.1.1999','dd.mm.yyyy') AND
TO_DATE('31.12.1999','dd.mm.yyyy')
14 GROUP BY code
15 )
16 ORDER BY summe DESC;
SELECT code, bezeichnung, SUM(menge) AS summe
*
FEHLER in Zeile 4:
ORA-00979: not a GROUP BY expression
SQL>
SQL> SELECT code, bezeichnung, SUM(menge)
2 FROM Artikel a, Bestellposten p, Bestellung b
3 WHERE a.code = p.a_code
4 AND p.b_nummer = b.nummer
5 AND datum BETWEEN
6 TO_DATE('1.1.1999','dd.mm.yyyy') AND TO_DATE('31.12.1999','dd.mm.yyyy')
7 GROUP BY code, bezeichnung
8 ORDER BY 3 DESC;
Es wurden keine Zeilen ausgew�hlt
So funktioniert auch Deine L�sung:
SQL> SELECT code, bezeichnung, summe
2 FROM
3 (
4 SELECT code, bezeichnung, SUM(menge) AS summe
5 FROM
6 (
7 SELECT code, bezeichnung, datum, menge
8 FROM Bestellung, Bestellposten, Artikel
9 WHERE code = a_code
10 AND Bestellung.nummer = Bestellposten.b_nummer
11 )
12 WHERE datum BETWEEN
13 TO_DATE('1.1.1999','dd.mm.yyyy') AND TO_DATE('31.12.1999','d
14 GROUP BY code, bezeichnung
15 )
16 ORDER BY summe DESC;
Es wurden keine Zeilen ausgew�hlt
Gru�
Ulrik
Re: Richtige L�sung einer Pr�fungsaufgabe?
Author: Dieter N�th
Date: Mon, 11 Jun 2001 12:27
Date: Mon, 11 Jun 2001 12:27
14 lines
1528 bytes
1528 bytes
Mike Pfaff wrote: >Der Dozent behauptet, das funktioniere so nicht mit >Subqueries hinter dem FROM(Steht aber so im Referenz-Manual, das er uns >abgegeben hat) und das sei sowieso nicht behandelt worden. Ein SELECT im FROM anstelle von Table/View ist ANSI-SQL 92, allerdings nicht aus dem Entry-Level, sondern Intermediate (oder sogar Full?) und hei�t "Derived Table". Nat�rlich ist deine L�sung weder elegant noch performant, aber bis auf das falsche group by richtig. Dieter
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads