Reputation: 1458
I am trying to do something like this:
SELECT a.date AS EnrollDate, a.id, a.name, b.address FROM student a JOIN Location b ON a.id=b.id
UNION
SELECT a.date AS EnrollDate, a.id, a.name, b.address FROM teacher a JOIN Location b ON a.id=b.id
WHERE a.date>'2010-01-01'
ORDER BY EnrollDate
But the WHERE condition applies to the second SELECT statement only. I need to somehow apply to both the SELECT. The only option I have now is to apply WHERE condition individually. But I am working with several UNIONs and it is kind of tedious to include WHERE in all the places. I was wondering if there is an easy way out.
By the way, I am working with MySQL.
Upvotes: 15
Views: 24405
Reputation: 3565
Have you tried something like:
SELECT * FROM (
SELECT a.date AS EnrollDate, a.id, a.name, b.address FROM student a
JOIN Location b ON a.id = b.id
UNION
SELECT a.date AS EnrollDate, a.id, a.name, b.address FROM teacher a
JOIN Location b ON a.id = b.id
) A
WHERE a.date > '2010-01-01'
ORDER BY EnrollDate
Upvotes: 5
Reputation: 21184
SELECT * FROM (
SELECT a.date AS EnrollDate, a.id, a.name, b.address FROM student a
JOIN Location b ON a.id=b.id
UNION
SELECT a.date AS EnrollDate, a.id, a.name, b.address FROM teacher a
JOIN Location b ON a.id=b.id
) A
WHERE EnrollDate > '2010-01-01'
ORDER BY EnrollDate
This also has the advantage, compared to individual ORDER BY
's that the whole result is correctly ordered.
Upvotes: 19
Reputation: 2648
There is no way around it, you have to repeat the WHERE for each individual select clause.
Upvotes: -2