MYSQL Inner Join if заявление - PullRequest
       2

MYSQL Inner Join if заявление

3 голосов
/ 07 апреля 2011

Я пытаюсь объединить 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

Мне нужно только показать имя клиента или персоналимя в зависимости от уровня, но я не могу понять, как, поскольку я присоединяюсь к штатному расписанию дважды.Один раз, чтобы получить член персонала, который зарегистрировал пользователя, а затем просмотреть имя персонала (или клиента).

Чтобы упростить задачу, пример страницы, которую я показываю:

username |имя |тип учетной записи |зарегистрирован

Надеюсь, я не слишком усложнил понимание.

Спасибо.

Ответы [ 2 ]

6 голосов
/ 07 апреля 2011
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
2 голосов
/ 07 апреля 2011

Разве это не работает?

INNER JOIN `staff` ON `user`.userID = staff.userID AND user.level = 2
INNER JOIN `customer` ON user.userID = customer.userID AND user.level = 1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...