我正在尝试使用manager_id
和user_id
作为MySQL中的输入来显示role_id
。这就是我尝试过的:
SELECT cbm_user.user_id as user_id
IF (cbm_roles.role_id = 3 THEN SELECT cbm_user.manager_id as manager_id, cbm_user.user_id as user_id, cbm_user_role.role_id as role_id from cbm_user left outer join cbm_user_role on cbm_user.user_id = cbm_user_role.user_id, left outer join cbm_roles on cbm_user_role.role_id = cbm_roles.role_id where role_id = 3)
END if;
但是我得到了
#1064 - 您的SQL语法出错;检查与MariaDB服务器版本对应的手册,以便在'IF附近使用正确的语法(cbm_roles.role_id = 3然后选择cbm_user.manager_id作为manager_id,cbm_use'在第2行
错误。我该怎么办?我还想添加两个条件。我怎么能这样做?
答案 0 :(得分:0)
您错误地使用IF。
您正在以错误的方式使用加入意味着","加入以及左联合。
您可以使用以下2种类型的查询 -
使用IF
SELECT cbm_user.user_id AS user_id
IF (cbm_roles.role_id = 3,cbm_user.manager_id,NULL) AS manager_id,
cbm_user.user_id AS user_id, cbm_user_role.role_id AS role_id
FROM cbm_user
LEFT JOIN cbm_user_role ON cbm_user.user_id = cbm_user_role.user_id
LEFT JOIN cbm_roles ON cbm_user_role.role_id = cbm_roles.role_id
WHERE role_id = 3;
使用案例
SELECT cbm_user.user_id AS user_id
CASE WHEN cbm_roles.role_id = 3 THEN cbm_user.manager_id END AS manager_id,
cbm_user.user_id AS user_id, cbm_user_role.role_id AS role_id
FROM cbm_user
LEFT JOIN cbm_user_role ON cbm_user.user_id = cbm_user_role.user_id
LEFT JOIN cbm_roles ON cbm_user_role.role_id = cbm_roles.role_id
WHERE role_id = 3;
答案 1 :(得分:0)
您的语句中有几个语法错误:
总结一下:你不能使用if()函数来决定要加入哪些表。我修复了下面的语法错误,但我不认为这是你想要的查询。
SELECT cbm_user.user_id as user_id,
IF(cbm_roles.role_id = 3, cbm_user.manager_id, null) as manager_id,
cbm_user_role.role_id as role_id
from cbm_user
left outer join cbm_user_role on cbm_user.user_id = cbm_user_role.user_id
left outer join cbm_roles on cbm_user_role.role_id = cbm_roles.role_id
where cbm_user_role.role_id = 3