我正在寻找一种将多个 SQL 查询结果与此行为组合起来的模式:
'尝试查询A,如果结果不为空则返回'
'如果A没有返回尝试查询B,如果结果不为空则返回'
'如果B没有返回任何内容尝试查询C,如果结果不为空则返回它们'
'如果C没有返回尝试查询D,如果结果不为空则返回它们'
'如果A、B、C、D都返回空集,则返回空集'
有什么建议吗?我的目标是简单性和性能,虽然我希望获得相对通用的 SQL,但我专门在 sqlite 和 mysql 上运行。
TIA。
最佳答案
在一般情况下,您必须单独检查查询是否返回任何内容:
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;使用 View ,或复制子查询。)
这效率很低。
最好编写自己的代码(在调用程序中或作为存储过程)来分别执行四个查询并检查结果。
关于mysql - 回退迭代 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33966882/