2017-12-31 171 views
0

Ich habe eine SQL-Abfrage, wo die Bedingung wie folgt lautet:Wie ausdrücke `andere` in SQL?

select ...... 
FROM TABLE1, TABLE2 
where ....... 
AND TABLE1.TYPE = CASE WHEN TABLE2.TYPE = 2 THEN 'S' ELSE (NOT S) 

Wie kann ich diese NOT S ausdrücken? das heißt möchte ich die Abfrage in Reihen führen, wo TABLE1.TYPE = S WHEN TABLE2.TYPE2 ist, oder wenn TABLE1.TYPE alles andere als S wenn TABLE2.TYPE ist alles andere als 2.

Ich führe diese Abfrage auf Oracle 11S2.

+1

Bitte lesen und verstehen Sie Gordons Antwort, die der richtige Weg ist, um auszudrücken, was Sie brauchen. Dann können Sie ein paar Minuten damit verbringen, dies zu lesen: http://xyproblem.info/ - um zu verstehen, was mit der Art, wie Sie die Frage gestellt haben, nicht stimmt. Sie haben gefragt, wie Sie etwas auf IHRE Art und Weise tun könnten (was schon in die falsche Richtung ging), anstatt nach dem "Original" zu fragen, das Sie lösen mussten. – mathguy

+0

@mathguy das ist nicht der Fall. Ich habe das ursprüngliche Problem festgestellt, nur habe ich erwähnt, was ich versucht habe, es zu lösen, was der richtige Ansatz ist, wenn man Fragen zu SO stellt. Ich habe die 'Immer Informationen über ein breiteres Bild zusammen mit jedem Lösungsversuch einschließen.Teil ... – amyassin

Antwort

3

Verwenden Sie einfache Logik, kein case:

where . . . and 
     (table2.type = 2 and table1.type = 'S' or 
     table2.type <> 2 and table2.type <> 'S' 
    ) 

Dies setzt voraus, dass die Spalten nicht nehmen auf NULL Werte. Dies kann leicht gehandhabt werden, macht die Ausdrücke jedoch etwas komplizierter.