Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Select Abfrage nach fehlenden Werten

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von henkhar, 16 August 2016.

  1. henkhar

    henkhar Neuer Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

    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
     
  3. henkhar

    henkhar Neuer Benutzer

    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
     
  4. ukulele

    ukulele Datenbank-Guru

    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
    Wir reden aber beide von MSSQL korrekt?
     
  5. henkhar

    henkhar Neuer Benutzer

    JA, hatte ich .. und dabei auch einen Fehler gemacht! ;)
    Super es funktioniert!
    Vielen, vielen Dank für die schnelle Hilfe
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden