我需要一個查詢,允許我計算一個列的值,同時考慮另一個表中的值,更準確地說,我需要計算用戶是否仍然處于活動狀態(如果用戶具有所有過期的角色,那么他是不活動的) ,考慮到第二張表的department_date
用戶角色表
| id_user | id_role | 出發日期 |
|---|---|---|
| 1 | 1 | 2022-05-05 |
| 1 | 2 | 2022-06-18 |
| 2 | 1 | 2022-04-12 |
用戶表
| id_user | 姓名 |
|---|---|
| 1 | 喬治 |
| 2 | 約翰 |
| 3 | 亞歷克斯 |
我想回傳這個表,其中 1 處于活動狀態,0 處于非活動狀態:
用戶表
| id_user | 姓名 | 地位 |
|---|---|---|
| 1 | 喬治 | 1 |
| 2 | 約翰 | 0 |
| 3 | 亞歷克斯 | 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 | 姓名 | 地位 |
|---|---|---|
| 1 | 喬治 | 1 |
| 2 | 約翰 | 0 |
先感謝您
uj5u.com熱心網友回復:
您不需要連接和聚合。
使用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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/476448.html
