MYSQL内部连接if语句

时间:2011-04-07 17:48:07

标签: 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)   

添加以上内容会创建错误

  

不唯一的表/别名:'staff'

如果我删除了工作人员的内部联接,我就会收到错误

  

您的SQL语法有错误;   检查对应的手册   您的MySQL服务器版本   正确的语法使用附近   'IF(user.level = 2)'在第6行

我只需要根据级别显示客户名称或员工姓名,但我无法理解我是如何两次加入员工表的。一旦获得注册用户的员工的成员,然后查看员工姓名(或客户)。

为了简化操作,我要显示的页面示例如下:

  

用户名|名字|帐户类型|   由

注册

希望我没有理解它太混乱。

感谢。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

这不行吗?

INNER JOIN `staff` ON `user`.userID = staff.userID AND user.level = 2
INNER JOIN `customer` ON user.userID = customer.userID AND user.level = 1