none
INSERT über Ausschlussabfrage RRS feed

  • Frage

  • Hallo,
    ich würde gerne, ohne Schleifen programmieren zu müssen, ein Insert-Statement ausführen, das alle noch nicht vorhandenen Datensätze in eine Tabelle einträgt.
    Dazu folgendes Szenario:

    tbl_MA: MA_ID, ...
    tbl_SK: SK_ID...
    tbl_Schulung: MA_ID, SK_ID, ...

    In die Tabelle tbl_Schulung soll für alle aktiven Mitarbeiter, denen eine bestimmte Schulungsklasse noch nicht zugewiesen wurde ein entsprechender Datensatz eingefügt werden.
    Also etwa so in der Art:

    INSERT INTO tbl_SCHULUNG (MA_ID, SK_ID) SELECT M.MA_ID, 100 AS SK_ID FROM dbo.tbl_MA AS M LEFT OUTER JOIN dbo.tbl_SCHULUNG AS S ON M.MA_ID = S.MA_ID WHERE (S.MA_ID IS NULL AND M.AKTIV = 1)


    Jetzt muss nur noch irgendwie die Abfrage nach der nichtvorhandenen Schulungsklasse mit einfließen, die mir dann die korrekte Ergebnismenge zurückliefert, aber ich steh da leider voll auf dem Schlauch. Deshalb die Bitte, ob mir evtl. jemand auf die Sprünge helfen kann. Vielen Dank.

    Viele Grüße, Volker


    • Bearbeitet Volker S Dienstag, 17. Januar 2017 11:19
    Dienstag, 17. Januar 2017 11:19

Antworten

  • Hallo Volker,

    da die Namen der Tabellen und Spalten leider erstmal nichtssagend sind, ist das eher raten als wissen.

    INSERT INTO tbl_SCHULUNG
    (
        MA_ID, SK_ID
    )
    SELECT MA_ID,
           100 AS SK_ID
    FROM   tbl_MA
    WHERE  AKTIV = 1
    AND    MA_ID NOT IN (
                         SELECT MA_ID
                         FROM   tbl_Schulung
                         WHERE  SK_ID = 100
                        )


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Volker S Dienstag, 17. Januar 2017 11:38
    Dienstag, 17. Januar 2017 11:24
    Moderator

Alle Antworten

  • Hallo Volker,

    da die Namen der Tabellen und Spalten leider erstmal nichtssagend sind, ist das eher raten als wissen.

    INSERT INTO tbl_SCHULUNG
    (
        MA_ID, SK_ID
    )
    SELECT MA_ID,
           100 AS SK_ID
    FROM   tbl_MA
    WHERE  AKTIV = 1
    AND    MA_ID NOT IN (
                         SELECT MA_ID
                         FROM   tbl_Schulung
                         WHERE  SK_ID = 100
                        )


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Volker S Dienstag, 17. Januar 2017 11:38
    Dienstag, 17. Januar 2017 11:24
    Moderator
  • Hallo Stefan,
    tut mir leid, dass ich es nicht besser beschrieben habe.
    Aber was soll ich sagen, du hast trotzdem ins Schwarze getroffen.
    Natürlich! "NOT IN"  sind die Zauberwörter.

    Du bist der Beste!
    Danke schön!


    Viele Grüße, Volker

    Dienstag, 17. Januar 2017 11:38