Mysql 如果值存在于其他表中,则从该表返回另一个值

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

我当前有以下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'

在当前显示为
的行中,然后是“%%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
。如果这是一个问题,可以调整子查询中的逻辑。

这比我预期的要容易。想到这可能太复杂了哈。非常感谢你!