Я пытаюсь создать таблицу, соединяя 2 таблицы с одним и тем же именем.
create table join_ as
select *
FROM sakila.film_actor fa join sakila.film_category fc
on fa.film_id = fc.film_id;
Он вернул это:
Код ошибки: 1060. Дублируемое имя столбца 'film_id'
Он работает нормально, если я только выбираю столбцы вместо создания таблицы. Как я могу сделать это без исчерпывающего перечисления всех имен столбцов или изменения исходной таблицы? Есть ли способ удалить один из "film_id" или изменить его?
Спасибо!!! Я новичок в SQL и надеюсь, что правильно описал свою проблему.
Вы можете сделать Natural Join:
create table join_ as
select *
from film_actor fa natural join film_category fc
Используйте это с осторожностью, так как это объединит все одинаково названные столбцы в один каждый.
Как правило, лучше перечислять столбцы явно, особенно для представления. Если вы не хотите, вы можете использовать, using
условие:
create table join_ as
select *
from sakila.film_actor fa join
sakila.film_category fc
using (film_id);
Это будет работать, если film_id
является единственным общим именем столбца между таблицами.
Я сильно, решительно, решительно препятствую вам использовать natural join
для этой цели. Во-первых, он использует все столбцы с одинаковым именем. Итак, если другой столбец имеет то же имя (например, createdAt
в большинстве createdAt
таблиц), тогда join
, вероятно, будет фильтровать строки. Отладка такой проблемы очень сложная. И добавление столбца в обе таблицы - после создания представления - может привести к сбою.
Я описываю natural join
как мерзость, особенно потому, что он не использует правильно объявленные внешние ключи для ключей join
. Вместо этого он просто использует столбцы, которые имеют одно и то же имя.
film_id
.
Проблема в *
. Есть два столбца с тем же именем. При создании таблицы все имена столбцов должны быть разными. В качестве примера вы можете сделать что-то вроде:
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
*
на этом; затем я select a.*, b.col1, b.col2, b.col3 ...
список имен столбцов на другом: select a.*, b.col1, b.col2, b.col3 ...