2011-12-15 46 views
2

我有以下查詢:每個派生的表必須有它自己的別名

SELECT `snap`.`ID`, `user`.`username`, `vote`.`type` 
FROM (`snap`) JOIN `user` as u ON `u`.`ID` = `snap`.`user` 
LEFT JOIN (select * from vote where user = "18") as vote ON `snap`.`ID` = `vote`.`snap` 
JOIN (SELECT CEIL(MAX(ID)*RAND()) AS ID FROM snap)) AS x ON `snap`.`ID` => `x`.`ID` 
WHERE `snap`.`active` = 0 LIMIT 1 

它工作得很好,直到我添加的最後一個加入。現在我得到錯誤:「每個派生表必須有它自己的別名」。我知道這是因爲每個表都需要它的別名,我需要把「as S」或某處放在某處,但我無法知道如何在此查詢中執行此操作。

回答

4

看起來像你有一個額外的右括弧後。它應該是1而不是2個括號。

SELECT `snap`.`ID`, `user`.`username`, `vote`.`type` 
FROM (`snap`) JOIN `user` as u ON `u`.`ID` = `snap`.`user` 
LEFT JOIN (select * from vote where user = "18") as vote ON `snap`.`ID` = `vote`.`snap` 
JOIN (SELECT CEIL(MAX(ID)*RAND()) AS ID FROM snap) AS x ON `snap`.`ID` = `x`.`ID` 
WHERE `snap`.`active` = 0 LIMIT 1 
+0

嘿,這是一個誤導性的分析錯誤的赫克! – 2011-12-15 18:22:35

1

正確的語法是:

SELECT `snap`.`ID`, `user`.`username`, `vote`.`type` 
FROM (`snap`) JOIN `user` as u ON `u`.`ID` = `snap`.`user` 
LEFT JOIN (select * from vote where user = "18") as vote ON `snap`.`ID` = `vote`.`snap` 
JOIN (SELECT CEIL(MAX(ID)*RAND()) AS ID FROM snap) AS x ON `snap`.`ID` = `x`.`ID` 
WHERE `snap`.`active` = 0 LIMIT 1 
相關問題