我正在寻找一种将多个SQL查询结果与此行为相结合的模式:
'尝试查询A,如果结果不为空则返回'
'如果A没有返回任何尝试查询B,如果结果不为空则返回'
'如果B没有返回任何尝试查询C,如果结果不为空则返回'
'如果C没有返回任何尝试查询D,如果结果不为空则返回'
'如果A,B,C,D全部返回空集,则返回空集'
有什么建议吗?我的目标是简单性和性能,虽然我希望相对通用的SQL我专门在sqlite和mysql上运行。
TIA。
答案 0 :(得分:1)
在一般情况下,您必须单独检查查询是否返回任何内容:
WITH A AS (SELECT ...),
B AS (SELECT ...),
C AS (SELECT ...),
D AS (SELECT ...)
SELECT * FROM A
UNION ALL
SELECT * FROM B WHERE NOT EXISTS (SELECT * FROM A)
UNION ALL
SELECT * FROM C WHERE NOT EXISTS (SELECT * FROM A)
AND NOT EXISTS (SELECT * FROM B)
UNION ALL
SELECT * FROM D WHERE NOT EXISTS (SELECT * FROM A)
AND NOT EXISTS (SELECT * FROM B)
AND NOT EXISTS (SELECT * FROM C);
(MySQL不支持WITH;使用视图或复制子查询。)
效率低下 编写自己的代码(在调用程序中,或作为存储过程)分别执行四个查询并检查结果将是一个更好的主意。