2011-04-07 70 views
3

我試圖加入3個表一起,但使用中間語句來只運行某個查詢MYSQL內部加入如果語句

我有一個用戶表,客戶和員工表。以下作品第一部分:

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) 

添加上面創建錯誤

不是唯一的表/別名: '員工'

如果我刪除工作人員的內部連接,則會發生錯誤

您的SQL語法錯誤; 檢查對應 你的MySQL服務器版本的 正確的語法附近 使用手冊「IF(user.level = 2)」第6行

我只需要證明客戶名稱或工作人員的名字取決於水平,但我無法理解我是如何兩次參加員工表的。一旦獲得註冊用戶的員工的記憶,然後查看員工姓名(或客戶)。

爲了讓我在顯示頁面的事情變得更簡單的例子是:

用戶名|名稱|賬戶類型| 註冊

希望我沒有把它弄糊塗得明白。

謝謝。

回答

5
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 
+0

謝謝!只有一個問題,員工似乎總是得到相同的名字,但客戶工作正常? – Elliott 2011-04-07 18:14:39

+0

所以這是一個不同的工作人員(即,不是註冊的)。 NP。將修復 – Thomas 2011-04-07 18:17:32

+0

@Elliott - 訣竅是使用一個不同的別名第二次加入職員。 – Thomas 2011-04-07 18:20:26

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 
+0

產生錯誤:不是唯一的表/別名: '員工' – Elliott 2011-04-07 17:55:41