我试图通过连接两个具有相同键名的表来创建一个表。
create table join_ as
select *
FROM sakila.film_actor fa join sakila.film_category fc
on fa.film_id = fc.film_id;
它返回了这个:
错误代码:1060。列名“film\u id”重复
如果我只选择列而不是创建表,它就可以正常工作。如何做到这一点,而不彻底列出所有列名或更改原始表?有没有办法去掉或更改一个“电影id”?
谢谢!!!我是sql新手,希望我已经正确地描述了我的问题。
3条答案
按热度按时间zphenhs41#
通常最好显式地列出列,尤其是对于视图。如果您不想,可以使用
using
条款:如果
film_id
是表之间唯一的公用列名。我强烈地,强烈地,强烈地劝阻你不要使用
natural join
为此目的。首先,它使用具有相同名称的所有列。因此,如果另一列具有相同的名称(例如createdAt
在我创建的大多数表中),然后join
可能会过滤掉行。调试这样的问题非常困难。而且,在创建视图之后,向任一表中添加列都可能导致失败。我描述
natural join
作为一个可憎的,特别是因为它没有使用正确声明的外键join
钥匙。相反,它只使用恰好具有相同名称的列。ffscu2ro2#
问题出在
*
. 有两列同名。创建表时,所有列名必须不同。例如,您可以执行以下操作:uttx8gqw3#
你可以做一个自然连接:
请小心使用,因为这样会将所有同名列合并为一列。