mysql:试图通过连接两个具有相同键名的表来创建表

bxpogfeg  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(343)

我试图通过连接两个具有相同键名的表来创建一个表。

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新手,希望我已经正确地描述了我的问题。

zphenhs4

zphenhs41#

通常最好显式地列出列,尤其是对于视图。如果您不想,可以使用 using 条款:

create table join_ as 
    select *
    from sakila.film_actor fa join
         sakila.film_category fc
         using (film_id);

如果 film_id 是表之间唯一的公用列名。
我强烈地,强烈地,强烈地劝阻你不要使用 natural join 为此目的。首先,它使用具有相同名称的所有列。因此,如果另一列具有相同的名称(例如 createdAt 在我创建的大多数表中),然后 join 可能会过滤掉行。调试这样的问题非常困难。而且,在创建视图之后,向任一表中添加列都可能导致失败。
我描述 natural join 作为一个可憎的,特别是因为它没有使用正确声明的外键 join 钥匙。相反,它只使用恰好具有相同名称的列。

ffscu2ro

ffscu2ro2#

问题出在 * . 有两列同名。创建表时,所有列名必须不同。例如,您可以执行以下操作:

create table join_ as 
select
   fa.film_id as a_film_id, 
   fc.film_id as c_film_id
  FROM sakila.film_actor fa
  join sakila.film_category fc on fa.film_id = fc.film_id
uttx8gqw

uttx8gqw3#

你可以做一个自然连接:

create table join_ as 
select *
from film_actor fa natural join film_category fc

请小心使用,因为这样会将所有同名列合并为一列。

相关问题