WHERE statement after a UNION in SQL?
Asked Answered
H

3

100

How do I apply a WHERE statement after a UNION in SQL/MySQL?

Holliman answered 27/3, 2011 at 20:34 Comment(0)
A
171

If you want to apply the WHERE clause to the result of the UNION, then you have to embed the UNION in the FROM clause:

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

I'm assuming TableA and TableB are union-compatible. You could also apply a WHERE clause to each of the individual SELECT statements in the UNION, of course.

Arrange answered 27/3, 2011 at 20:38 Comment(4)
Any idea if MySQL will push the predicate into the individual statements?Jaan
@Martin: it might - it might not. You'd have to look at the query plan. It also depends on the WHERE clause conditions.Arrange
@Martin, Don't hope too much. Having us to do something like this shows just how dumb MySQL is....Maddocks
works flawlessly!Carboni
G
28

You probably need to wrap the UNION in a sub-SELECT and apply the WHERE clause afterward:

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

Basically, the UNION is looking for two complete SELECT statements to combine, and the WHERE clause is part of the SELECT statement.

It may make more sense to apply the outer WHERE clause to both of the inner queries. You'll probably want to benchmark the performance of both approaches and see which works better for you.

Gayn answered 27/3, 2011 at 20:39 Comment(1)
works flawlessly!Carboni
P
0
select column1..... from table1
where column1=''
union
select column1..... from table2
where column1= ''
Phia answered 16/11, 2014 at 10:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.