我对 MySQL 查询非常基础。我在 Laravel Web 应用程序上工作,此时需要编辑用户角色的部分。我有一个表列出了用户角色的选项(称为 mst_level),另一个表反射(reflect)了具有该角色的用户列表(称为 mst_user_level)。多次搜索该主题,但总是发现不同的情况。
预期输出:
Select all levels for a spesific user_id, and return all columns in mst_level + 1 column called "checked", with the condition if the user has that role in mst_user_level, return true, else return 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'
有人可以帮我解决这个问题吗?非常感谢...
最佳答案
您可以使用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';
关于MySQL Select from table 返回全部,加上带有条件的一列和另一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69422426/