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?
简短的回答是否定的,但您可以避免第二个查询,但您必须重新运行第一个:
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 的结果对于所有行都是假的。
如果第一个查询的运行成本比第二个查询便宜得多,那么如果第一行返回行,您可能会提高性能。
| 归档时间: |
|
| 查看次数: |
1237 次 |
| 最近记录: |