使用if条件在mysql中显示

时间:2016-04-15 05:57:36

标签: mysql sql mariadb

我正在尝试使用manager_iduser_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行

错误。我该怎么办?我还想添加两个条件。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

  1. 您错误地使用IF。

  2. 您正在以错误的方式使用加入意味着","加入以及左联合。

  3. 您可以使用以下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()函数
  • 连接表达式中的额外逗号

总结一下:你不能使用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