首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回退迭代sql查询

问回退迭代sql查询
EN

Stack Overflow用户
提问于 2015-11-28 09:58:30
回答 1查看 96关注 0票数 0

我正在寻找一种将多个SQL查询结果与此行为相结合的模式:

‘尝试查询A,如果结果不为空,则返回它们’

‘如果A未返回任何内容,请尝试查询B,如果结果不为空,则返回它们’

‘如果B未返回任何内容,请尝试查询C,如果结果不为空,则返回它们’

‘如果C未返回任何内容,请尝试查询D,如果结果不为空,则返回它们’

‘如果A、B、C、D都返回空集,则返回空集’

有什么建议吗?我的目标是简单性和性能,虽然我希望使用相对通用的SQL,但我专门在sqlite和mysql上运行。

蒂娅。

EN

回答 1

Stack Overflow用户

发布于 2015-11-28 20:43:25

在一般情况下,您必须单独检查查询是否返回任何内容:

代码语言:javascript
复制
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;请使用视图或复制子查询。)

这是低效的。

更好的做法是编写您自己的代码(在调用程序中,或者作为存储过程),分别执行这四个查询并检查结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33966882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档