2016-11-18 3 views
-2

Sakilaデータベース(https://dev.mysql.com/doc/sakila/en/)からいくつかのテーブル(MySQLの場合)にビューを作成しようとしています。つまり、支払い、スタッフ、顧客に参加したい顧客の名前、スタッフの名前、支払いIDおよび金額を表示することができます。 Viewsを右クリックし、次にCreate Tableをクリックしました。 スタッフテーブルと顧客テーブルには、first_nameとlast_nameの両方の列があるため、このエラーは存在すると思います。どうすればこの問題を解決できますか?エラーの解決方法1060:ビューを使用した列名の重複表示

マイコード:

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 

エラーメッセージ: ERROR 1060:私は回答者の一部が示唆したように、私はエラーを取得し、別名でそれをしようとすると、列名 'first_nameの'

を複製エラー1347: 'sakila.payment'はVIEWではありません。

まったく同じコードは、SQLファイルの魅力のように機能します。実行すると、必要なテーブルが作成されます。これら2つの方法の違いは何ですか?どちらを使うべきですか?ビュー - >ビューを作成するオプションを使用していないのはなぜですか?

ありがとうございます。名前を割り当てる

+0

customerテーブルから定義するfirst_name列を定義したので、ここに表示されている結合から転記されたエラーは表示されません。おそらく実際の結合では、テーブルを指定しなかったでしょう。 – Niagaradad

+0

SELECT payment.payment_id、customer.first_name as 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_namelast_nameあなたselectリストに2回表示。上記は顧客またはスタッフの名前かどうかを明確にしています。

+0

今私はERROR 1347: 'sakila.payment'がVIEWではないと言っているエラーが出ます。私はすでにSELECTステートメントでASを使用しようとしましたが、動作しませんでした。この正確なエラーも戻ってきました。 @LillaNagy。 –

+0

。 。 。私はあなたがビューをテーブルと同じ名前にしようとしていることを忘れていました。ビューには異なる名前が必要です。私はしばしば、この目的のために 'v_'を前に付けます。 –

+0

それは大丈夫です、私はこれを言い忘れました、私は数分前にそれを編集しました。ありがとう、私はそれを試みます。 –

0

カラム名は一意でなければならないという制約があります。

SELECTクエリはおそらく有効ですが、同じ名前の列を返します。名前がfirst_nameの2つの列と、last_nameという名前の2つの列。

我々はビューとしてクエリを使用すると、エラーがアップ作物(インライン・ビュー、または格納されたビューのいずれか。)

回避策がないように、カラム別名を提供することによって、列の名前を変更することです結果セットの2つの列は同じ名前です。例:

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 ... 
関連する問題