2016-07-28 8 views
0

Ich versuche, eine zu schaffen, verbinden, dass die folgende Logik folgt:CASE Statment und IN() Operator in Joinbedingung

Wenn unser Unternehmen die Plaintiff ist, kommen auf die folgenden Rollentypen in der Tabelle : Verteidigung Firm, Verteidiger

Wenn unser Unternehmen auf die folgenden Rollentypen der Angeklagte, verbinden sie ist in die Tabelle: haben Plaintiff Firm, Plaintiff Attorney

Bisher habe ich diesen Code in der Join geschrieben, aber es erzeugt immer einen Fehler für jede Syntax Ich habe versucht:

WHERE 

TRIAL.TRIAL_ID = OPPOSITION.TRIAL_ID 
AND OPPOSITION.ROLE IN 

CASE 
WHEN TRIAL.POSITION = 'Plaintiff' 
THEN ('Defense Firm','Defense Attorney') 
WHEN TRIAL.POSITION = 'Defendant' 
THEN ('Plaintiff Firm','Plaintiff Attorney') 
END 

Wir derzeit auf Oracle laufen (??) g.

Ist diese Art der Verknüpfungslogik überhaupt möglich?

EDITS:

  • den Angeklagten/Plaintiff mixup im
  • Abschnitt Code behoben
  • Nicht sicher, welche Version von Oracle sind wir auf.
+0

CASE-Anweisung sollte in Select nicht in WHERE-Klausel – 6ton

+0

@ 6ton verwendet werden - Sie können einen Case-Ausdruck in einer JOIN- oder WHERE-Klausel verwenden; aber Sie können nur das einzelne Ergebnis dieses Ausdrucks mit etwas anderem vergleichen. Sie können nicht tun, was das OP versucht ... –

+0

Ich habe nur ein paar Beispiele gesehen - habe es noch nie in der WHERE-Klausel benutzt. Danke @AlexPoole – 6ton

Antwort

0

Sie können mit UND/ODER-Logik, mit entsprechender klammerten Gruppierung, um dies zu erreichen (wenn ich nach dem, was Sie brauchen), so etwas wie:

WHERE TRIAL.TRIAL_ID = OPPOSITION.TRIAL_ID 
AND (
    (TRIAL.POSITION = 'Plaintiff' 
    AND OPPOSITION.ROLE IN ('Defense Firm', 'Defense Attorney') 
    OR 
    (TRIAL.POSITION = 'Defendant' 
    AND OPPOSITION.ROLE IN ('Plaintiff Firm', 'Plaintiff Attorney') 
) 

Obwohl diese schauen, wie sie sein sollte, Teil einer ANSI JOIN-Klausel anstelle einer WHERE-Klausel