我目前有以下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,但是我目前无法弄清楚确切的位置。
答案 0 :(得分:1)
您已经在使用相关子查询。您可以使用它来获取值:
ELSE (SELECT COALESCE(MAX(bu.backend_type), 'unknown')
FROM backend_users bu
WHERE bu.id = video_calls.initiated_user_id
)
请注意MAX()
的使用。这样可以确保仅返回一个值。如果没有行匹配,则MAX()
返回NULL
,因此返回'unknown'
。
这与您的伪代码有一点细微差别。如果匹配的行是NULL
,则返回'unknown'
而不是NULL
。如果有问题,可以调整子查询中的逻辑。