WHERE-Anweisung nach einer UNION in SQL?


71

Wie wende ich eine WHERE-Anweisung nach einer UNION in SQL / MySQL an?

Antworten:


125

Wenn Sie die WHERE-Klausel auf das Ergebnis der UNION anwenden möchten, müssen Sie die UNION in die FROM-Klausel einbetten:

SELECT *
  FROM (SELECT * FROM TableA
        UNION
        SELECT * FROM TableB
       ) AS U
 WHERE U.Col1 = ...

Ich gehe davon aus, dass TableA und TableB gewerkschaftskompatibel sind. Natürlich können Sie auch eine WHERE-Klausel auf jede einzelne SELECT-Anweisung in der UNION anwenden.


3
Irgendeine Idee, ob MySQL das Prädikat in die einzelnen Anweisungen pusht?
— Martin Smith

2
@ Martin: es könnte - es könnte nicht. Sie müssten sich den Abfrageplan ansehen. Dies hängt auch von den Bedingungen der WHERE-Klausel ab.
— Jonathan Leffler

2
@ Martin, hoffe nicht zu viel. Wenn wir so etwas machen, zeigt sich, wie dumm MySQL ist ...
— Pacerier

16

Sie müssen das wahrscheinlich UNIONin ein Unterzeichen einschließen SELECTund anschließend die WHEREKlausel anwenden :

SELECT * FROM (
    SELECT * FROM Table1 WHERE Field1 = Value1
    UNION
    SELECT * FROM Table2 WHERE Field1 = Value2
) AS t WHERE Field2 = Value3

Grundsätzlich UNIONsucht das nach zwei vollständigen SELECTAnweisungen zum Kombinieren, und die WHEREKlausel ist Teil der SELECTAnweisung.

Es kann sinnvoller sein, die äußere WHEREKlausel auf beide inneren Abfragen anzuwenden . Sie möchten wahrscheinlich die Leistung beider Ansätze bewerten und herausfinden, welche für Sie besser funktioniert.


0
select column1..... from table1
where column1=''
union
select column1..... from table2
where column1= ''
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.