dedlfix: "Fehlerhafte" Einträge anzeigen lassen

Beitrag lesen

Tach!

So?

Nein, schreibe ich undeutlich?

SELECT h.*

FROM haupt h
WHERE h.companyId NOT IN (SELECT h.companyId FROM haupt h, company c WHERE h.companyId = c.id)


>   
> Anm.: die h.companyId ist dieselbe wie in c.id... die spalten heißen nur anders...  
  
h.companyId ist ein Verweis auf die company-Tabelle. In Tabelle haupt kann es mehrere Datensätze mit demselben Wert für h.companyId geben. Damit kannst du keine Datensätze in haupt identifizieren, denn dazu brauchst du einen einmaligen Wert. Der steht (vermutlich) in der Spalte id der Tabelle haupt. Deswegen sollst du in der Subquery diese IDs ermitteln und in der Haupt-Query ebenfalls gegen diese IDs vergleichen.  
  
Du kannst dein Ziel aber auch anders erreichen. Meine Lösung funktioniert generell (wenn richtig umgesetzt), auch wenn noch mehr einschränkende Bedingungen hinzukämen. Sie identifiziert in der Subquery die guten Datensätze, die in der Haupt-Query ausgeschlossen werden sollen. In deinem Fall willst du im Grunde genommen alle Datensätze aus haupt, deren companyId nicht in der Tabelle company enthalten ist. Damit kannst du die Hauptquery so lassen, wie sie oben steht und musst in der Subquery nur alle id aus company ermitteln (also ganz einfache Query ohne Join).  
  
  
dedlfix.