【问题标题】:Using if condition to display in mysql使用if条件在mysql中显示
【发布时间】:2016-04-15 05:57:35
【问题描述】:

我正在尝试使用 user_idrole_id 作为 MySQL 中的输入来显示 manager_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 服务器版本相对应的手册,以在第 2 行的 'IF (cbm_roles.role_id = 3 THEN SELECT cbm_user.manager_id as manager_id, cbm_use' 附近使用正确的语法

错误。我应该怎么办?我还想再添加两个条件。我该怎么做?

【问题讨论】:

标签: mysql sql mariadb


【解决方案1】:
  1. 您以错误的方式使用 IF。

  2. 您以错误的方式使用连接意味着“,”连接以及左连接。

您可以使用以下 2 种类型的查询-

使用如果

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;

【讨论】:

    【解决方案2】:

    您的语句中有几个语法错误:

    • 字段之间缺少逗号
    • 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
    

    【讨论】:

      猜你喜欢
      • 2014-11-23
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2012-04-05
      • 2022-11-17
      相关资源
      最近更新 更多