SQL-Select gesucht



  • Hi!

    Ich möchte folgendes in einem SQL-Statement formulieren:

    IF TABELLE1.WERT1 = 'X'
    AND TABELLE2.PK1 = TABELLE1.PK1 nicht vorhanden
    AND TABELLE2.PK1 = TABELLE1.FK2 nicht vorhanden

    Wie würde das idealerweise aussehen?
    WERT1 ist ein String, PK1 Primärschlüssel und FK1 Fremdschlüssel

    Dabei möchte ich den PK1 als Rückgabe haben.

    Mein Ansatz dafür:

    select PK1
    from TABELLE1
    where WERT1 = 'X'
    except
    select PK1
    from TABELLE2

    da fehlt aber noch die Bedingung für das zweite AND. Ich weis nicht recht wie ich das umsetzen soll.

    Vielen Dank!

    Gruß
    Dudeldu



  • Sowas vielleicht?

    SELECT
       PK1 
    FROM
       TABELLE1 t1
    WHERE
       NOT EXISTS( SELECT 1 FROM TABELLE2 t2 WHERE t2.PK1 = t1.PK1 ) AND
       NOT EXISTS( SELECT 1 FROM TABELLE2 t2 WHERE t2.PK1 = t1.FK2 )
    


  • Hi, danke für die Antwort!

    Hatte gehofft mit EXCEPT und ohne NOT EXIST auszukommen (Das NOT EXIST hat den Zugriffspfad in einem vorherigen SQL-Statement, wo ich nur mit einem NOT EXIST/EXCEPT gearbeitet habe vermasselt und lief deutlich langsamer).

    Gruß
    Dudeldu



  • Im Prinzip das selbe nur IMO schöner zu lesen (und für sehr doofe Server vielleicht auch besser zu optimieren):

    SELECT
       PK1
    FROM
       TABELLE1 t1
    WHERE
           PK1 NOT IN (SELECT t2.PK1 FROM TABELLE2 t2)
       AND FK2 NOT IN (SELECT t2.PK1 FROM TABELLE2 t2)
    


  • Danke! Werde Anfang nächster Woche das mal Testen.