2 Stimmen

Verwendung von Joined-Tables zum Ausschluss bestimmter Datensätze

Ich habe einen SQL Server 2005 Tabelle (#1) die die Namen der Mitarbeiter und verschiedene Informationen über jeden von ihnen auflisten.

Ich habe eine zweite Tabelle (#2) die einige der Arbeitnehmer auflistet, die ich von meinen Ergebnissen ausschließen möchte. (Die Namen der Mitarbeiter können in einer von 2 Spalten erscheinen: A und B.)

Kann ich verbundene Tabellen für EXCLUDE verwenden?

Liste aller genannten Mitarbeiter Fred en table #1 ... aber schließen Sie einen bestimmten Mitarbeiter aus, der in table #2 . Si Fred Smith ist aufgeführt in table #2 (in einem von 2 Feldern), wird er nicht in meinen Ergebnissen aufgeführt. (aber liste alle anderen Fred Datensätze aus table #1 )

SELECT * 
FROM table1 AS t1, table2 AS t2
WHERE ('Fred Smith' <> t2.employeeA) AND ('Fred Smith' <> t2.employeeB)

(Ich bekomme es nicht hin, unabhängig davon, ob ich Join-Tables verwende oder nicht).

9voto

RichardTheKiwi Punkte 102469

Es gibt verschiedene Möglichkeiten, dies zu schreiben, aber die am besten funktionierende (normalerweise kann die Datenverteilung dies ändern) ist normalerweise der Existenztest. Es ist auch einfach, die genaue Absicht zu verstehen, wie geschrieben.

select * from table1 t1
where not exists (
    select * from table2 t2
    where t2.employeeA = t1.employee
       or t2.employeeB = t1.employee)

Sie können auch einen anderen Weg ausprobieren, um zu sehen, welcher für Sie besser funktioniert.

select t1.*
from table1 t1
left join table2 t2 on
  t2.employeeA = t1.employee or t2.employeeB = t1.employee
where t2.id is null   -- check that the join failed by testing against the PK of t2

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X