SQL: nicht Vorhandenes finden

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

Hi!

Was würde ich ohne dieses Forum nur anfangen :o)

SQL lernen? :wink:

Grüße,
Tomh

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*