SQL列名不明确

时间:2016-11-19 20:57:38

标签: mysql

我遇到了一个新的IMDB系统问题。我的具体问题是,当我跑:

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

我在这里发现的所有问题似乎都与您在列名前面加上表名或者在这种情况下是一个视图名称有关,因为我写的是构建另一个视图的视图

4 个答案:

答案 0 :(得分:2)

您选择的是stars,然后是INNER JOIN stars

SELECT ... FROM stars INNER JOIN stars

我认为您可能希望根据您的查询加入movie_directors

答案 1 :(得分: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;

答案 2 :(得分:0)

我认为这是因为你没有正确别名。

应该是

选择...... 来自明星 内部联接明星为 anothername

答案 3 :(得分: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;

希望这有帮助!