mysql - SQL,如果子查询中的属性返回任何内容,否则返回所有内容
问题描述
我正在尝试添加一个条件(子查询),它基本上会过滤输出,但如果子查询不返回任何内容,我希望以某种方式忽略这个条件。
我的主要查询很长而且很复杂,所以我将在这里举一个简单的例子。
set @userid := 55;
select project, userid
from users_projects
where userid IN
(select userid from activeusers)
AND
project IN (select userid from paidprojects where userid = @userid)
因此,如果select userid from paidprojects where userid = @userid
返回一个空输出,我希望忽略最后一个条件。
我试过这个
set @userid := 55;
select project, userid
from users_projects
where userid IN
(select userid from activeusers)
AND
project IN (IF count(select userid from paidprojects where userid = @userid)>0, (select userid from paidprojects where userid = @userid), (select userid from activeusers))
但它不起作用,我收到语法错误:(
解决方案
因此,如果 select userid from paidprojects where userid = @userid 返回空输出,我希望忽略最后一个条件。
也就是说,您只需要付费项目(如果有的话)。否则,您需要所有(未付费)项目。
首先,我假设您想将最后一个查询中的项目而不是项目与用户进行比较。这似乎是破碎的。
编写此逻辑的一种显式方法是:
select up.project, up.userid
from users_projects up
where up.userid in (select au.userid from activeusers au) and
(up.project in (select pp.project from paidproject pp where pp.userid = @userid) or
not exists (select pp.project from paidproject pp where pp.userid = @userid)
);
推荐阅读
- docker - 如何在 nginx 容器中启动 syslogd
- php - Php json _decode function returns null on long data
- angular - TypeError:无法读取未定义的属性“returnValue”
- javascript - 如何在内部使用两个调度来开玩笑测试 redux-thunk 动作?
- python-3.x - 元素等于未通过其索引时间限制
- java - 在从 String > 4k 创建的谓词中使用 Oracle clob
- java - 为什么有符号字节的大小不等于 -128 到 128?
- java - Android Material Design Icon Generator 1.9 的 Android Studio 3.6.1 问题
- javascript - 在requirejs路径配置中加载html文件
- ios - 在 SatelliteFlyover 和 hybridFlyover MapTypes 中使用 MKCircle 覆盖的 iOS MapKit 错误