我需要一个查询,允许我计算一列的值,同时考虑到另一个表中的值,更准确地说,我需要计算用户是否仍然处于活动状态(如果一个用户拥有所有过期的角色,那么他处于非活动状态),同时考虑到第二个表中的离开日期

user_role

id_user id_role departure_date
1 1 2022-05-05
1 2 2022-06-18
2 1 2022-04-12

user

id_user name
1 George
2 John
3 Alex

我想返回此表,其中1处于活动状态,0处于非活动状态:

user

id_user name status
1 George 1
2 John 0
3 Alex 0

现在,我已经做了一个查询,它返回我的所有非活动用户和具有一个或多个分配角色的活动用户.我想获取所有用户,包括那些没有分配角色的用户(如我的示例中的Alex)

SELECT user_management.user.*,
       if(count(CASE when current_date() > departure_date_organization 
                     then 1 END) = count(*),0,1) as status
FROM user_management.user, 
     user_organization_role 
WHERE user.id_user = user_management.user_organization_role.id_user 
GROUP BY user.id_user;

使用我的查询,我得到了这个结果,它不包含Alex:

id_user name status
1 George 1
2 John 0

提前谢谢

推荐答案

You don't need joins and aggregation.
Use EXISTS:

SELECT u.*,
       EXISTS (
         SELECT 1 
         FROM user_management.user_organization_role r 
         WHERE r.id_user = u.id_user AND r.departure_date_organization > CURRENT_DATE
       ) status
FROM user_management.user u;

Mysql相关问答推荐

在mySQL中使用子查询和WHERE子句的JOIN

插入时发生日期时间字段溢出错误

从表中 Select 具有不同顺序的列

如何用sql找出两次之间的差异

模拟Mysql Cursor类的fetchone()方法,并将其返回值设置为None

数据导入和默认目标架构空列表. (Mysql 工作台 8)

是否可以使用以EXPLAIN EXTENDED ...开头的 SQL 语句修改数据?

当mysql中只有一个索引列时,为什么使用范围条件锁定读取会锁定每条记录?

使用来自另一个表 mysql 的值将新行插入到表中

我在 mysql 查询中需要帮助,我想在年龄之间按年龄过滤器分组,并显示 0 计数之间找不到的数据

SQL从具有相同列的行中 Select 最后一行

更新和替换未加引号的 JSON 字符串

动态创建内联 SQL 表(用于排除左连接)

mysql错误:错误1018(HY000):无法读取'.'的目录(错误号:13)

PHP 判断 NULL

如何使用 SQL 数据库中的经纬度查找最近的位置?

MySQL:ALTER IGNORE TABLE 给出违反完整性约束

警告:mysqli_connect(): (HY000/1045): Access denied for user 'username'@'localhost' (using password: YES)

在 MySQL Workbench 中导出超过 1000 条记录的查询结果

如何从邮箱地址中 Select 域名