短路UNION?(如果第一个子句没有结果,则只执行第二个子句)

Jim*_*Jim 1 mysql sql union resultset set

如果我做:

SELECT * FROM A   
WHERE conditions  
UNION  
SELECT * FROM B   
WHERE conditions 
Run Code Online (Sandbox Code Playgroud)

我得到了 A的查询结果集和 B 的查询结果集的集。

有没有办法/运算符让我可以得到短路OR结果?

即获取结果,SELECT * FROM A WHERE conditions并且当这不返回任何内容时才获取SELECT * FROM B WHERE conditions?

Boh*_*ian 5

简短的回答是否定的,但您可以避免第二个查询,但您必须重新运行第一个:

SELECT * FROM A   
WHERE conditions  
UNION  
SELECT * FROM B   
WHERE NOT EXISTS (
    SELECT * FROM A   
    WHERE conditions)
AND conditions
Run Code Online (Sandbox Code Playgroud)

这假设优化器帮助并短路第二个查询,因为 NOT EXISTS 的结果对于所有行都是假的。

如果第一个查询的运行成本比第二个查询便宜得多,那么如果第一行返回行,您可能会提高性能。