MYSQL Inner Join if 语句

标签 mysql if-statement

我正在尝试将 3 个表连接在一起,但使用 IF 语句仅运行特定查询

我有一个用户表、客户表和员工表。下面的第一部分有效:

SELECT user.`userID`, `username`,  `user`.email, `registeredBy`, `registeredDate`, 
  CONCAT(staff.firstName, ' ' ,staff.lastName) AS staffName FROM `user` 
   INNER JOIN `level` ON `user`.levelID = `level`.levelID 
    INNER JOIN `staff` ON `user`.registeredBy = `staff`.userID 

我需要查看谁注册了显示正常的用户,但是如果用户级别为 2,我需要查看员工姓名,如果用户级别为 1,我需要查看客户姓名

INNER JOIN `staff` ON `user`.userID = staff.userID IF (user.level = 2)
INNER JOIN `customer` ON user.userID = customer.userID IF(user.level = 1)   

添加上面的内容会产生错误

Not unique table/alias: 'staff'

如果我删除 staff 的 inner join,我就会得到错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF(user.level = 2)' at line 6

我只需要根据级别显示客户姓名或员工姓名,但我无法理解,因为我正在加入员工表两次。一次获取注册用户的员工的成员,然后查看员工姓名(或客户)。

为了让事情变得更简单,我正在显示的页面示例是:

username | name | account type | registered by

希望我没有把它弄得太困惑而难以理解。

谢谢。

最佳答案

Select user.userID
    , username
    , user.email
    , registeredBy, registeredDate
    , Case 
        When User.Level = 2 Then Concat(Level2Staff.firstName, ' ' , Level2Staff.lastName) 
        When User.Level = 1 Then Concat(customer.firstName, ' ' , customer.lastName) 
        End
        AS staffName 
FROM user
    Inner Join level
        On user.levelID = level.levelID 
    Inner Join staff
        On user.registeredBy = staff.UserID
    Left Join customer
        On customer.userID = user.UserID
            And user.level = 1
    Left Join staff As Level2Staff
        On user.userID = Level2Staff.UserID

关于MYSQL Inner Join if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5585338/

相关文章:

Windows 平台下的 MySQL 集群问题

mysql - 检查变量是否与 SQL 中的表行匹配

MySQL 查询不返回

Java 格式化以获取最后计数

mysql - 将 SUM 与 CASE 语句一起使用

mysql - 查询设置货币mysql

MySql JOIN 在最近的开始日期?

javascript - 如果变量包含

python - 我的 'lowest common multiple' 程序挂起,没有输出答案

python - Pandas 根据另一列中的条件计算一列中的数字