SQL中的UNION之后的WHERE语句?

ein*_*ein 56 mysql sql

如何在SQL/MySQL中的UNION之后应用WHERE语句?

Jon*_*ler 99

如果要将WHERE子句应用于UNION的结果,则必须在UN子句中嵌入UNION:

SELECT *
  FROM (SELECT * FROM TableA
        UNION
        SELECT * FROM TableB
       ) AS U
 WHERE U.Col1 = ...
Run Code Online (Sandbox Code Playgroud)

我假设TableA和TableB是联合兼容的.当然,您还可以将WHERE子句应用于UNION中的每个SELECT语句.

  • 知道MySQL是否会将谓词推入单个语句中? (3认同)
  • @Martin:它可能 - 它可能不会.您必须查看查询计划.它还取决于WHERE子句的条件. (2认同)
  • @Martin,不要抱太大希望。让我们做这样的事情表明 MySQL 是多么愚蠢...... (2认同)

Dav*_*vid 13

您可能需要将UNION子包装在子中SELECT并在WHERE之后应用该子句:

SELECT * FROM (
    SELECT * FROM Table1 WHERE Field1 = Value1
    UNION
    SELECT * FROM Table2 WHERE Field1 = Value2
) AS t WHERE Field2 = Value3
Run Code Online (Sandbox Code Playgroud)

基本上,UNION正在寻找两个完整的SELECT语句来组合,并且该WHERE子句是SELECT语句的一部分.

将outer WHERE子句应用于两个内部查询可能更有意义.您可能希望对这两种方法的性能进行基准测试,看看哪种方法更适合您.