2016-11-18 6 views
-2

Я пытаюсь создать представление из присоединения некоторых таблиц (в MySQL) из базы данных Sakila (https://dev.mysql.com/doc/sakila/en/), а именно: хочу присоединиться к оплате, персоналу и клиенту и отобразите имя клиента, имя сотрудника, идентификатор платежа и сумму. Я щелкнул правой кнопкой мыши на представлениях, а затем создал таблицу. Я думаю, что эта ошибка существует из-за того, что в таблице сотрудников и в таблице клиентов есть оба столбца с именем first_name и last_name. Как я могу решить эту проблему?Как решить ERROR 1060: Дублировать имя столбца с помощью Views -> Create View

Моего код:

CREATE VIEW `payment` AS 
SELECT payment.payment_id, customer.first_name, customer.last_name, 
staff.first_name, staff.last_name, payment.amount 
FROM payment INNER JOIN customer ON payment.customer_ID = customer.customer_ID 
INNER JOIN staff ON payment.staff_ID = staff.staff_ID 

Сообщение об ошибке: ОШИБКА 1060: Повторяющегося имя столбца «first_name»

Если я пытаюсь его с псевдонимами, так как некоторые из отвечающих предложили, я получаю ошибку ОШИБКА 1347: «sakila.payment» не ПРОСМОТРЕТЬ.

Точный же код работает как шарм в SQL-файле, когда я его запускаю, он создает нужную мне таблицу. В чем разница между этими двумя методами? Какой из них я должен использовать? И почему он не работал с опцией Views -> Create View?

Заранее спасибо.

+0

вы не получите сообщение об ошибке, указанное в списке соединений, которое вы показываете здесь, так как вы определили, какой столбец first_name вы хотите определить, указав его из таблицы клиентов. Возможно, в вашем фактическом соединении вы не указали таблицу. – Niagaradad

+0

попробуйте SELECT payment.payment_id, customer.first_name как customer_firstname, customer.last_name as customer_last_name ... и т. Д. ... другими словами, добавьте псевдоним к тем же именам столбцов ... – barudo

+0

@Niagaradad, я указал таблицу в действительном соединении –

ответ

1

Используйте псевдонимы для присвоения имен:

CREATE VIEW v_payment AS 
    SELECT p.payment_id, c.first_name as customer_first_name, c.last_name as customer_last_name, 
      s.first_name as staff_first_name, s.last_name as staff_last_name, 
      p.amount 
    FROM payment p INNER JOIN 
     customer c 
     ON p.customer_ID = c.customer_ID INNER JOIN 
     staff s 
     ON p.staff_ID = s.staff_ID; 

first_name и last_name появляются дважды в вашем select списке. Приведенное выше разъясняет, является ли имя для клиента или персонала.

+0

Теперь я получаю сообщение об ошибке ERROR 1347: 'sakila.payment' не VIEW. Я уже пытался использовать AS в инструкции SELECT, но это не сработало, я тоже получил эту точную ошибку. –

+0

@LillaNagy. , , Я пропустил, что вы пытаетесь присвоить то же имя, что и таблица. В представлениях должны быть разные имена. Я часто добавляю их с помощью 'v_' для этой цели. –

+0

Все в порядке, я забыл упомянуть об этом, я только редактировал его несколько минут назад. Спасибо, я попробую. –

0

Ограничение на то, что имена столбцов должны быть уникальными.

Запрос SELECT, вероятно, действителен, но возвращает столбцы с одинаковым именем. Два столбца с именем first_name и два столбца с именем last_name.

Ошибка всплывает, когда мы используем запрос в качестве точки зрения (либо встроенное представление или хранимая вид.)

Чтобы обойти эту проблему, чтобы переименовать столбцы, предоставляя столбец псевдоним, так что нет два столбца в наборе результатов имеют одно и то же имя. Например:

SELECT payment.payment_id 
    , customer.first_name AS customer_first_name 
    , customer.last_name AS customer_last_name 
    , staff.first_name  AS staff_first_name 
    , staff.last_name  AS staff_last_name 
    , payment.amount 
    FROM payment 
    JOIN customer 
    ON ... 
    JOIN staff 
    ON ... 
Смежные вопросы