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

时间:2019-10-18 17:47:15

标签: 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 '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,但是我目前无法弄清楚确切的位置。

1 个答案:

答案 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。如果有问题,可以调整子查询中的逻辑。