Mysql 如果值存在于其他表中,则从该表返回另一个值
我当前有以下SQL查询:Mysql 如果值存在于其他表中,则从该表返回另一个值,mysql,sql,Mysql,Sql,我当前有以下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
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'
在当前显示为
的行中,然后是“%%backend%%”
我想返回列backend\u users.backend\u type
,而不是找到值video\u calls.initiated\u user\u id
的对应行。我想我需要在这里使用联接,但我目前无法确定确切位置。您已经在使用相关子查询。您可以使用它来获取值:
ELSE (SELECT COALESCE(MAX(bu.backend_type), 'unknown')
FROM backend_users bu
WHERE bu.id = video_calls.initiated_user_id
)
注意使用MAX()
。这确保只返回一个值。如果没有匹配的行,MAX()
返回NULL
,因此返回“未知”
这与伪代码有一点细微差别。如果匹配行为
NULL
,则返回'unknown'
,而不是NULL
。如果这是一个问题,可以调整子查询中的逻辑。这比我预期的要容易。想到这可能太复杂了哈。非常感谢你!