Select Abfrage nach fehlenden Werten

henkhar

Neuer Benutzer
Beiträge
3
Zugegeben, ich bin Anfänger.
Bei folgendem Problem habe ich schon alles mögliche probiert, komme aber nicht weiter.
Ich habe in MSSQL drei Tabellen mit folgenden Namen, Spalten und Beispielwerten

Db1_Stichprobe:
Bereichsnummer, Artikelnummer
1001,4353662
1001,1111114
1001, 27827265689
1002, 4353662


Db2_Bestand:

Bereichsnummer, Artikelnummer
1001,4353662
1001, 5242576
1001, 27827265689
1001, 27827265689
1002, 4353662
1003,9853345
1003, 1111114

Db3_Artikelbezeichnungen
Artikelnummer, Bezeichnung
4353662, Artikel1
5242576, Artikel2
1111114, Artikel3
27827265689, Artikel4
9853345, Artikel5

Ich benötige den SQL Befehl, der folgende Abfrage startet:

Zeige an, welche Artikelnummern (mit Bezeichnung) in der DB1_Stichprobe vorhanden sind, die aber nicht in der Db2_Bestand stehen UND sich innerhalb der gleichen Bereichsnummer befinden.

In dem oa. Beispiel würde also (nur) angezeigt:
1001,1111114, Artikel3

Das ist sicher einfach, aber ich kriege es nicht hin!
Gruß
Harald
 
Werbung:
Da gibt es einige Wege, elegant fände ich die Verwendung von EXCEPT:
Code:
SELECT   t.Bereichsnummer,
     t.Artikelnummer,
     b.Bezeichnung
FROM   (

SELECT   Bereichsnummer,Artikelnummer
FROM   Db1_Stichprobe
EXCEPT
SELECT   Bereichsnummer,Artikelnummer
FROM   Db2_Bestand

     ) t
LEFT JOIN Db3_Artikelbezeichnungen b
ON     t.Artikelnummer = b.Artikelnummer
 
Danke für die schnelle Antwort... aber es passt noch nicht ganz.
jetzt werden alle Zeilen der db1_Stichprobe angezeigt ( mit Artikeltext, der Join-Befehl klappt also schon mal) :

das kommt raus:
1001,4353662, Artikel 1
1001,1111114, Artikel 3
1001, 27827265689, Artikel 4
1002, 4353662, Artikel 1

das soll rauskommen:
1001,1111114, Artikel3
 
Dann hast du irgendetwas am Query geändert, bei mir funktioniert das tadelos:
Code:
WITH Db1_Stichprobe(Bereichsnummer,Artikelnummer) AS (
   SELECT 1001,4353662 UNION ALL
   SELECT 1001,1111114 UNION ALL
   SELECT 1001,27827265689 UNION ALL
   SELECT 1002,4353662
   ), Db2_Bestand(Bereichsnummer,Artikelnummer) AS (
   SELECT 1001,4353662 UNION ALL
   SELECT 1001,5242576 UNION ALL
   SELECT 1001,27827265689 UNION ALL
   SELECT 1001,27827265689 UNION ALL
   SELECT 1002,4353662 UNION ALL
   SELECT 1003,9853345 UNION ALL
   SELECT 1003,1111114
   ), Db3_Artikelbezeichnungen(Artikelnummer,Bezeichnung) AS (
   SELECT 4353662,'Artikel1' UNION ALL
   SELECT 5242576,'Artikel2' UNION ALL
   SELECT 1111114,'Artikel3' UNION ALL
   SELECT 27827265689,'Artikel4' UNION ALL
   SELECT 9853345,'Artikel5'
   )
SELECT   t.Bereichsnummer,
     t.Artikelnummer,
     b.Bezeichnung
FROM   (

SELECT   Bereichsnummer,Artikelnummer
FROM   Db1_Stichprobe
EXCEPT
SELECT   Bereichsnummer,Artikelnummer
FROM   Db2_Bestand

     ) t
LEFT JOIN Db3_Artikelbezeichnungen b
ON     t.Artikelnummer = b.Artikelnummer
Bereichsnummer Artikelnummer Bezeichnung
-------------- --------------------------------------- -----------
1001 1111114 Artikel3
Wir reden aber beide von MSSQL korrekt?
 
Werbung:
Zurück
Oben