Hallo und guten Morgen!
Bin mit meinem Latein wieder mal am Ende. Ich soll (aus Geschwindigkeitsgründen möglichst mit einem einzigen SQL-Befehl) aus einer Tabelle
Spalten: KeyNr|Fabe|BestNr|Datum z.B.:
1|Blau|0815|1.1.2000
2|Gruen|0815|1.1.2000
3|Gelb|0815|1.1.2000
4|Blau|1234|5.1.2001
5|Gelb|1234|5.1.2001
usw. usf.
folgende Daten finden:
diejenigen Bestellungen (also Bestellnummern), die eine bestimmte Farbe (z.B. ‚Blau‘) NICHT enthalten.
Bin für jeden Tip froh!
Mit bestem Dank schon mal im Voraus für Euer Bemühen,
coyote
Hallo und guten Morgen!
Bin mit meinem Latein wieder mal am Ende. Ich soll (aus
Geschwindigkeitsgründen möglichst mit einem einzigen
SQL-Befehl) aus einer Tabelle
Spalten: KeyNr|Fabe|BestNr|Datum z.B.:
1|Blau|0815|1.1.2000
2|Gruen|0815|1.1.2000
3|Gelb|0815|1.1.2000
4|Blau|1234|5.1.2001
5|Gelb|1234|5.1.2001
usw. usf.
folgende Daten finden:
diejenigen Bestellungen (also Bestellnummern), die eine
bestimmte Farbe (z.B. ‚Blau‘) NICHT
enthalten.
Wie wäre es mit folgendem Statement:
SELECT KeyNr,Fabe,BestNr,Datum
FROM Bestellungen
WHERE BestNr NOT IN
(
SELECT BestNr
FROM Bestellungen
WHERE Fabe='BLAU'
)
ORDER BY BestNr
Gruß Markus
Wie wäre es mit folgendem Statement:
SELECT KeyNr,Fabe,BestNr,Datum
FROM Bestellungen
WHERE BestNr NOT IN
(
SELECT BestNr
FROM Bestellungen
WHERE Fabe=‚BLAU‘
)
ORDER BY BestNr
Gruß Markus
Was würde ich ohne dieses Forum nur anfangen :o)
Vielen Dank, hat funktioniert!!
Gruss, Thomas
Hallo Markus!
Der Besserwisser ist mal wieder unterwegs und fragt sich: Warum so kompliziert? Wenn ich nicht irgendwas übersehe geht doch auch:
> SELECT KeyNr,Fabe,BestNr,Datum
> FROM Bestellungen
> WHERE BestNr NOT IN
> (
> SELECT BestNr
> FROM Bestellungen
> WHERE Fabe **!** ='BLAU'
> )
> ORDER BY BestNr
Wenn Fabe auch NULLs enthalten kann, dann eben (falls gewünscht) noch Erweiterung um „OR Fabe IS NULL“. Ich blind oder Du umständlich?
Gruß Martin
Hallo Markus!
Der Besserwisser ist mal wieder unterwegs und fragt sich:
Warum so kompliziert? Wenn ich nicht irgendwas übersehe geht
doch auch:
SELECT KeyNr,Fabe,BestNr,Datum
FROM Bestellungen
WHERE BestNr NOT IN
(
SELECT BestNr
FROM Bestellungen
WHERE Fabe ! =‚BLAU‘
)
ORDER BY BestNr
Wenn Fabe auch NULLs enthalten kann, dann eben (falls
gewünscht) noch Erweiterung um „OR Fabe IS NULL“. Ich blind
oder Du umständlich?
Nach meinem Verständnis Repräsentiert eine Zeile der Tabelle jeweils eine Bestellposition, Zeilen mit gleicher Bestellnummer gehören zu einer Bestellung.
1|Blau|0815|1.1.2000
2|Gruen|0815|1.1.2000
3|Gelb|0815|1.1.2000
4|Blau|1234|5.1.2001
5|Gelb|1234|5.1.2001
Meine Vorgehensweise war daher im Subselect erst alle Bestellungen zu ermitteln, die eine Position Fabe=‚BLAU‘ enthalten, um diese dann im zweiten Schritt vom Endergebnis ausklammern zu können.
Durch deine Änderung blendest du lediglich einzelne Bestellpositionen aus, d.h. bezogen auf die Daten (s.o.) hat die Bestellung =‚1234‘ zwei Positionen, dein SQL liefert aber nur die Position FABE=‚GELB‘. Zum einen gibst du damit nur eine zerstückelte Bestellung zurück, denn zu dieser Bestellung gehört ja auch der Posten ‚BLAU‘. Zum anderen gibst du eine Bestellung zurück, in der FABE=‚BLAU‘ vorkommt.
Im Ergebnis darf die Bestellnr ‚1234‘ nicht vorkommen, da sie eine POsition FABE=‚BLAU‘ enthält.
Denke ich zu kompliziert? :o)
Gruß Markus
Mahlzeit,
Der Besserwisser ist mal wieder unterwegs und fragt sich:
Da kommt der Besserbesserwisser und meint:
SELECT KeyNr,Fabe,BestNr,Datum
FROM Bestellungen
WHERE BestNr NOT IN
(
SELECT BestNr
FROM Bestellungen
WHERE Fabe ! =‚BLAU‘
)
ORDER BY BestNr
Damit findest du z.B. die zweite Position der Bestellung 0815, obwohl genau diese in der ersten Position einen blauen Artikel hat.
Gruß
Sancho
Hallo Markus, hallo Sancho!
Ich nehme alles zurück und behaupte strikt das Gegenteil! Natürlich habt ihr recht. Asche über mein Haupt!
Gruß
Martin *DerSichFestVornimmtInZukunftDieAngabeWiederGscheitZuLesen*