如果我这样做:
SELECT * FROM A
WHERE conditions
UNION
SELECT * FROM B
WHERE conditions
我得到了B的查询的A 和结果集的查询结果集的并集。
是否有方法/操作符,以便我可以获得短路OR
结果?
即。获取SELECT * FROM A WHERE conditions
和仅的结果如果返回任何内容,则获取SELECT * FROM B WHERE conditions
的结果集?
答案 0 :(得分:3)
简短的回答是否定的,但您可以避免第二个查询,但必须重新运行第一个查询:
SELECT * FROM A
WHERE conditions
UNION
SELECT * FROM B
WHERE NOT EXISTS (
SELECT * FROM A
WHERE conditions)
AND conditions
这假设优化器帮助输出和短路第二个查询,因为NOT EXISTS的结果对所有行都是假的。
如果第一个查询比第二个查询便宜得多,那么如果第一行返回行,则可能会获得性能。
答案 1 :(得分:1)
您可以使用单个SQL查询执行此操作:
SELECT *
FROM A
WHERE conditions
UNION ALL
SELECT *
FROM B
WHERE conditions and not exists (select * from A where conditions);
答案 2 :(得分:0)
您是否尝试过“If”声明?
If(select Count(*) from A where conditions) > 0
Then Select * from A where conditions
Else Select * from B where conditions