首页 > 解决方案 > 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))

但它不起作用,我收到语法错误:(

标签: mysqlsql

解决方案


因此,如果 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)
      );

推荐阅读