我目前有以下SQL查询:
SELECT video_calls.initiated_user_id AS user_id,
(CASE
WHEN EXISTS
(SELECT *
FROM patients
WHERE patients.id = video_calls.initiated_user_id)
THEN 'patient'
ELSE (CASE
WHEN EXISTS
(SELECT *
FROM backend_users
WHERE backend_users.id = video_calls.initiated_user_id)
THEN "%%backend%%"
ELSE "unknown"
END)
END) AS user_type
FROM video_calls
WHERE id='7f350a98-93d3-4d21-80a8-6cda3e47a4c0'
UNION
SELECT user_id,
user_type
FROM channel_joins
WHERE channel_id='7f350a98-93d3-4d21-80a8-6cda3e47a4c0'
在当前显示该行的地方,THEN "%%backend%%"
我想返回已找到backend_users.backend_type
该值的对应行的列video_calls.initiated_user_id
。我想我需要在这里使用JOIN,但是我目前无法弄清楚确切的位置。
您已经在使用相关子查询。您可以使用它来获取值:
ELSE (SELECT COALESCE(MAX(bu.backend_type), 'unknown')
FROM backend_users bu
WHERE bu.id = video_calls.initiated_user_id
)
注意的使用MAX()
。这样可以确保仅返回一个值。如果没有行匹配,则MAX()
返回return NULL
,因此'unknown'
返回。
这与您的伪代码有一点细微差别。如果匹配的行是NULL
,则返回'unknown'
而不是NULL
。如果这是一个问题,可以调整子查询中的逻辑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句