Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [SQL] Wie bilde ich dieses resultset? (https://www.delphipraxis.net/68776-%5Bsql%5D-wie-bilde-ich-dieses-resultset.html)

RuX 5. Mai 2006 10:19

Datenbank: Informix • Version: 7 • Zugriff über: BDE

[SQL] Wie bilde ich dieses resultset?
 
Ich brauche ein bestimmtes resultset, weiß aber nicht wie ich es bilden kann.

folgende vereinfachung: es gibt eine master tabelle sagen wir die verschiedene autos enthält, und eine detail tabelle die motoren definiert, die für ein auto verfügbar sind (1:n; 1 auto hat n verfügbare motoren). die detail tabelle definiert außerdem noch wie viel hubraum der motor besitzt.
spalten der detail tabelle: id (primary von motoren), rel (referenz auf auto) und ccm (hubraum); alles integer.
was ich jetzt brauche ist eine liste aller motoren (und zwar NUR die ids!), die jeweils am stärksten für ihr auto sind.

pro auto ist das ganze recht einfach:
SELECT id FROM motoren WHERE ccm = (SELECT max(ccm) FROM motoren WHERE rel = 123) AND rel = 123

hoffe ich konnte es verständlich erklären!

mkinzler 5. Mai 2006 10:24

Re: [SQL] Wie bilde ich dieses resultset?
 
Poste mal die Metadaten der Tabelle(n).

Safti 5. Mai 2006 10:36

Re: [SQL] Wie bilde ich dieses resultset?
 
Auf Oracle das müsste eigentlich so funktionieren:
SQL-Code:
SELECT id FROM motoren WHERE (rel, ccm) in (SELECT rel, max(ccm) FROM motoren group by rel)
In wie weit die Syntax mit Informix passt, kann ich allerdings nicht sagen. Aber ich denke, das sollte auch gehen.

RuX 5. Mai 2006 10:41

Re: [SQL] Wie bilde ich dieses resultset?
 
Zitat:

Zitat von mkinzler
Poste mal die Metadaten der Tabelle(n).

ok z. b.
autos ist eigentlich irrelevant:

id
1
2
3
4
5
6
7
...

motoren:

id | rel | ccm
1 | 1 | 10
2 | 1 | 15
3 | 1 | 5
4 | 2 | 15
5 | 2 | 5
6 | 3 | 10
7 | 2 | 5
8 | 5 | 20
9 | 5 | 15
10 | 6 | 10

das ergebnis sollte dann sein
2 (die id vom höchsten ccm für rel 1)
4 (die id vom höchsten ccm für rel 2)
6 etc...
8 "
10 "

Zitat:

Zitat von Safti
Auf Oracle das müsste eigentlich so funktionieren:
SQL-Code:
SELECT id FROM motoren WHERE (rel, ccm) in (SELECT rel, max(ccm) FROM motoren group by rel)
In wie weit die Syntax mit Informix passt, kann ich allerdings nicht sagen. Aber ich denke, das sollte auch gehen.

funktioniert leider bei informix nicht, dort müssen sub-selects immer eine spalte zurückgeben und ich kann auch keine begriffe für INs zusammenfassen :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz