Каждая производная таблица должна иметь собственный псевдоним.

У меня есть следующий запрос:

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. Теперь я получаю сообщение об ошибке: «Каждая производная таблица должна иметь свой собственный псевдоним». Я знаю, что это потому, что каждой таблице нужен свой псевдоним, и мне нужно где-то поставить «как S» или что-то в этом роде, но я не могу понять, как это сделать в этом запросе.


person Bob    schedule 15.12.2011    source источник


Ответы (2)


Похоже, у вас есть лишняя закрывающая скобка после привязки. Это должна быть 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
person Nitin Midha    schedule 15.12.2011
comment
да у меня заработало. Действительно очень спасибо!! Кстати, я также изменил =›, потому что это дало другую ошибку. - person Bob; 15.12.2011

Правильный синтаксис:

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
person Dewasish Mitruka    schedule 15.12.2011