为什么这个SQL代码给错误1066(不是唯一的表/别名:“用户”)?(Why does this S

2019-07-18 06:36发布

这是我的表结构:

该错误消息是:

#1066 - 不唯一的表/别名:“用户”

下面是我的代码。

SELECT article.* , section.title, category.title, user.name, user.name
FROM article
INNER JOIN section ON article.section_id = section.id
INNER JOIN category ON article.category_id = category.id
INNER JOIN user ON article.author_id = user.id
LEFT JOIN user ON article.modified_by = user.id
WHERE article.id = '1'

Answer 1:

你需要给用户表的别名,你加入到它的第二次

SELECT article . * , section.title, category.title, user.name, u2.name 
FROM article 
INNER JOIN section ON article.section_id = section.id 
INNER JOIN category ON article.category_id = category.id 
INNER JOIN user ON article.author_id = user.id 
LEFT JOIN user u2 ON article.modified_by = u2.id 
WHERE article.id = '1'


Answer 2:

你的错误是因为你有:

     JOIN user ON article.author_id = user.id
LEFT JOIN user ON article.modified_by = user.id

你有相同的表的两个实例,但数据库不能确定哪个是哪个。 为了解决这个问题,你需要使用表的别名

     JOIN USER u ON article.author_id = u.id
LEFT JOIN USER u2 ON article.modified_by = u2.id

这是很好的习惯,总是别名你的表,除非你喜欢写完整的表名,当你没有像这些情况的所有时光。

为了解决下一个问题将是:

SELECT article.* , section.title, category.title, user.name, user.name

1)不要使用SELECT * -总是拼写出你想要的列,即使是整个表。 阅读本SO问明白为什么 。

2)你会得到关于暧昧列错误user.name列,因为再次,数据库不能告诉表实例从中提取数据。 使用表别名修复该问题:

SELECT article.* , section.title, category.title, u.name, u2.name


Answer 3:

您已在FROM子句中提到的“用户”两次。 你必须提供一个表的别名到至少一个提所以用户的每个提。 可以固定到一个或另一个实例:

FROM article INNER JOIN section
ON article.section_id = section.id
INNER JOIN category ON article.category_id = category.id
INNER JOIN user **AS user1** ON article.author\_id = **user1**.id
LEFT JOIN user **AS user2** ON article.modified\_by = **user2**.id
WHERE article.id = '1'

(您可能需要不同的东西 - 我猜哪个用户是哪个,但SQL引擎不会猜。)

另外,也许你只需要一个“用户”。 谁知道?



Answer 4:

    SELECT art.* , sec.section.title, cat.title, use1.name, use2.name as modifiedby
FROM article art
INNER JOIN section sec ON art.section_id = sec.section.id
INNER JOIN category cat ON art.category_id = cat.id
INNER JOIN user use1 ON art.author_id = use1.id
LEFT JOIN user use2 ON art.modified_by = use2.id
WHERE art.id = '1';

希望这可以帮助



文章来源: Why does this SQL code give error 1066 (Not unique table/alias: 'user')?