【问题标题】:Every derived table must have its own alias每个派生表都必须有自己的别名
【发布时间】:2011-12-15 18:14:44
【问题描述】:

我有以下疑问:

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

在我添加最后一个 JOIN 之前它工作得很好。现在我得到错误:“每个派生表都必须有自己的别名”。我知道这是因为每个表都需要它的别名,我需要将“as S”或其他东西放在某个地方,但我无法在此查询中找到如何做到这一点。

【问题讨论】:

    标签: mysql join random derived


    【解决方案1】:

    好像你在 snap 之后有额外的右括号。它应该是 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
    

    【讨论】:

    • 是的,我成功了。真的真的很感谢!!顺便说一句,我还更改了 =>,因为这给出了另一个错误。
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2016-10-21
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      相关资源
      最近更新 更多