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

最後のJOINを追加するまではうまくいきました。「すべての派生テーブルには独自のエイリアスが必要です」というエラーが表示されます。すべてのテーブルに on エイリアスが必要であり、「as S」などをどこかに配置する必要があるためだとわかっていますが、このクエリでそれを行う方法がわかりません。

4

2 に答える 2

4

スナップの後に余分な閉じ括弧があるようです。閉じ括弧は 2 つではなく 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
于 2011-12-15T18:18:41.263 に答える
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
于 2011-12-15T18:28:06.240 に答える