conrado
Goto Top

Gibt es dafür ein SQL-Query?

Hallo Forum,

bin kein Datenbankexperte, deshalb frage ich mich ob es für mein Problem überhaupt ein SQL-Query gibt oder ob ich mich eines anderen Weges bedienen muss, der leider viel umständlicher sein wird.

Folgende Tabelle:

o | k | ende |
1 | 1 | 2014 |
2 | 1 | 2013 |
3 | 1 | 2017 |
1 | 2 | 2011 |
2 | 2 | 2014 |
3 | 2 | 2013 |
1 | 3 | 2006 |
2 | 3 | 2005 |
3 | 3 | 2004 |

Die Abfrage soll alle k ausspucken, bei denen alle o ein ende kleiner 2007 haben.
Das Ergebnis wäre '3'.
Ich habe schon mit einigen GROUP und WHERE-Ausdrücken herumprobiert, bin aber zu keiner Lösung gekommen.
Vielleicht hat hier jemand eine Idee?

Danke im Voraus,

Conrad

Content-Key: 55108

Url: https://administrator.de/contentid/55108

Printed on: April 24, 2024 at 18:04 o'clock

Member: filippg
filippg Mar 27, 2007 at 02:05:08 (UTC)
Goto Top
SELECT o FROM Tabelle WHERE ende < 2007 MINUS SELECT o FROM Tabelle WHERE ende >= 2007 sollte eigentlich das gewünschte Ergebnis liefern.
Näheres auch unter http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/index.htm

Filipp

Edit: os sollen natürlich ks sein. Aber mit dieser kleinen Änderung finde ich sollte das Ergebnis ganz gut hinkommen.
Member: Guenni
Guenni Mar 27, 2007 at 04:19:46 (UTC)
Goto Top
@12434

Hi,

da in dieser Tabelle all o und alle k das gleiche Ende haben,
genügt eigentlich "select k from tabelle where ende < 2007".

Oder soll das Ergebnis 3 die Anzahl k sein?

"select count(k) as "Anzahl k" from tabelle where ende < 2007".

Grüße
Günni
Member: conrado
conrado Mar 27, 2007 at 09:16:21 (UTC)
Goto Top
Hallo,

danke erstmal für euren Mühen. O sind Ordner und K sind Kartons. Es sollen alle Kartons angegeben werden, in denen !alle! Ordner kleiner 2007 sind. In diesem Falle ist das Ergebnis Karton 3. Das Problem ist halt irgendwie das gruppieren und überprüfen ob bei allen Elementen mit k=1, k=2, k=3 auch bei allen o das ende kleiner 2007 ist.
Member: Biber
Biber Mar 27, 2007 at 10:49:20 (UTC)
Goto Top
Moin conrado,

hier muss ich mich mal als Mod einmengen, weil... so wird das Ergebnis unbefriedigend bleiben.

  • Wenn es um SQL-Queries geht, bitte das konkrete Datenbank-Blech angeben, das darunterliegt (Access, mySQL, Oracle...etc).
  • bei Deiner Fragestellung ist nicht klar, ob als Ergebnis nun alle relevanten Datensätze (mit allen Feldern) rausfallen sollen oder das Ziel ein "Select Distinct (Kartons)..." , also im Ergebnis ein Resultset mit in Deinem Fall einem Feld k Inhalt 3 sein soll oder
  • so etwas wie ein "SELECT * FROM kartons GROUP BY k HAVING Max(ende) < 2007"

Deine letzte Erläuterung mit "k sind Kartons und o sind Ordner" hilft zwar schon ein bisschen weiter als der Eröffnungsthread, aber richtig transparent wird mir das Datenmodell noch nicht ganz. Bzw. das, was dort fachlich/inhaltlich abgebildet wird.

Wenn das alles zu weit führen würde, dann gehe bitte den oben begonnen Weg weiter und poste zu der Skizze "alle Datensätze" noch zusätzlich die Skizze "Gewünschtes Ergebnis der Abfrage".

Danke
Biber
Member: Guenni
Guenni Mar 27, 2007 at 19:30:49 (UTC)
Goto Top
@conrado

Hi,

jetzt wird einiges klarer, glaub' ich zumindest.

Du hast die Ordner 1,2,3,1,2,3 usw. genannt.
Das macht die Sache einigermaßen unklar. Besser wäre es, die Ordner
fortlaufend zu nummerieren.

Dann gehe hin, und ändere bei einigen Datensätzen, als Test, das Ende(unter 2007),
und führe folg. Befehl aus:

SELECT o.o AS Ordner, k.k AS "In Karton", o.ende as "Ordner Ende"
FROM tabelle o, tabelle k
WHERE o.ende <2007
AND o.ende = k.ende


Somit erhalte ich alle Kartons, in denen Ordner < 2007 stecken.

Grüße
Günni
Member: conrado
conrado Mar 27, 2007 at 20:02:37 (UTC)
Goto Top
Danke für eure Hilfe,

dass ich ein paar Infos zu wenig gegeben habe, habe ich mir auch schon gedacht.
Günni hat das Problem, das Query von Biber funktioniert genauso gut.

Ich habe mich nochmal mit GROUP BY beschäftigt und verstehe jetzt auch wie es funktioniert, danke nochmal für eure Hilfe mit Lerneffekt.


Grüße
Conrad