在SQL中为UNION使用单个公共WHERE条件

jit*_*dra 7 mysql sql

我想做这样的事情:

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
Run Code Online (Sandbox Code Playgroud)

但WHERE条件仅适用于第二个SELECT语句.我需要以某种方式应用于SELECT.我现在唯一的选择是单独应用WHERE条件.但我正在与几个UNION合作,在所有地方都包含WHERE是很乏味的.我想知道是否有一个简单的方法.

顺便说一句,我正在使用MySQL.

Jan*_*net 13

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
Run Code Online (Sandbox Code Playgroud)

与个人相比,这也具有优势,ORDER BY即整个结果正确排序.

  • 请注意,这(至少在我的情况下)不会单独指定表上的条件,它会对整个结果集执行where查询,从而考虑随后丢弃的行.在我的情况下(总共10M行)它不是这样使用它的解决方案...... (4认同)

Joã*_*ira 5

您是否尝试过类似的事情:

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
Run Code Online (Sandbox Code Playgroud)