2016-11-19 3 views
0

У меня возникли проблемы с новой системой IMDB, которую я создаю. Мой конкретный вопрос в том, что когда я бегу:SQL имя столбца неоднозначное

CREATE VIEW `directors` AS 
SELECT 
`stars`.`id` AS `movie_id`, 
`stars`.`title`,`stars`.`rating`, 
`stars`.`storyline`, 
`stars`.`star`, 
`people_list`.`name` AS `director` 
FROM `stars` 
INNER JOIN `stars` 
ON `movie_directors`.`movie` = `stars`.`id` 
INNER JOIN `people_list` 
ON `movie_directors`.`director` = `people_list`.`id` 
WHERE `movie_directors`.`enabled` = 1; 

Я получаю следующее сообщение об ошибке:

#1052 - Column 'stars.id' in field list is ambiguous 

Все вопросы, которые я нашел здесь, кажется, связаны с тем, когда вы не префиксом имя столбца с именем таблицы или, в данном случае имя вида, так как я пишу представление, чтобы построить с другим вида

+0

Замените 'FROM stars' на' FROM movie_directors' – Hadi

+0

«ОТ звезд СОЕДИНИТЕ звезды» что? Это намеренно? – Strawberry

ответ

2

Вы выбираете из stars, а затем INNER JOIN ИНГ на stars:

SELECT ... FROM stars INNER JOIN stars 

Я думаю, что вы, вероятно, захотите присоединиться к movie_directors по вашему запросу.

0

Вы используете автообъединение (начинается таблица используется два времени) в этом случае вам нужен псевдоним для отсылают надлежащего экземпляр таблицы

CREATE VIEW `directors` AS 
    SELECT 
     `stars`.`id` AS `movie_id` 
    , `stars`.`title` 
    ,`stars`.`rating` 
    , `stars`.`storyline` 
    , `stars`.`star` 
    , `people_list`.`name` AS `director` 
    FROM `stars` 
    INNER JOIN `stars` as s2 ON `movie_directors`.`movie` = s2.`id` 
    INNER JOIN `people_list` ON `movie_directors`.`director` = `people_list`.`id` 
    WHERE `movie_directors`.`enabled` = 1; 
0

Я думаю, что это потому, что вы не правильно наложение спектров.

Это должно быть что-то вроде

выберите ... от звезд внутреннего соединения звезд, как anothername

0

Это выглядит неоднозначным, потому что у вас есть две ссылки на stars таблице. Ваш пункт FROM и ваш первый INNER JOIN.

Похоже, вы намереваетесь присоединиться к movie_directors вместо INNER JOIN stars. Например.

CREATE VIEW `directors` AS SELECT 
`stars`.`id` AS `movie_id`, 
`stars`.`title`,`stars`.`rating`, `stars`.`storyline`, `stars`.`star`, `people_list`.`name` AS `director` 
FROM `stars` 
INNER JOIN `movie_directors` ON `movie_directors`.`movie` = `stars`.`id` 
INNER JOIN `people_list` ON `movie_directors`.`director` = `people_list`.`id` WHERE `movie_directors`.`enabled` = 1; 

Надеюсь, это поможет!

Смежные вопросы