【问题标题】:MySQL Select from table return all, plus one column with condition and another queryMySQL 从表中选择返回全部,加上一个带有条件的列和另一个查询
【发布时间】:2021-11-24 01:53:00
【问题描述】:

我在 MySQL 查询方面非常基础。我在一个 Laravel 网络应用程序上工作,此时需要编辑用户角色的部分。我有一个表列出了用户角色的选项(称为 mst_level),另一个表反映了具有该角色的用户列表(称为 mst_user_level)。多次搜索这个主题,但总是找到不同的案例。

mst_level

mst_user_level

预期输出:

为特定的 user_id 选择所有级别,并返回所有列 在名为“已检查”的 mst_level + 1 列中,使用 如果用户在 mst_user_level 中具有该角色,则返回 true, 否则返回 false。

这是我已经做过的,我知道这是错误的

    select a.*, coalesce(true, false) as checked from  my_db_name.mst_level a
         inner join my_db_name.mst_user_status b on a.id = b.mst_level_id
         where b.mst_user_id = '363fdeea-5330-490a-b4db-34e32a3526d6'

谁能帮我解决这个问题?非常感谢...

【问题讨论】:

    标签: mysql boolean left-join exists


    【解决方案1】:

    您可以使用EXISTS

    SELECT m.*, 
           EXISTS (
             SELECT 1 
             FROM my_db_name.mst_user_status s 
             WHERE s.mst_level_id = m.id
               AND s.mst_user_id = '363fdeea-5330-490a-b4db-34e32a3526d6'
           ) AS checked 
    FROM my_db_name.mst_level m;
    

    或者使用LEFT JOIN,其中条件在ON 子句中设置:

    SELECT m.*, s.mst_level_id IS NOT NULL AS checked 
    FROM my_db_name.mst_level m LEFT JOIN my_db_name.mst_user_status s 
    ON s.mst_level_id = m.id AND s.mst_user_id = '363fdeea-5330-490a-b4db-34e32a3526d6';
    

    【讨论】:

      猜你喜欢
      • 2011-03-13
      • 2010-12-25
      • 2017-10-05
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 2011-05-09
      相关资源
      最近更新 更多