2017-12-30 151 views
0

Oracleで左結合を使用してビューを作成する方法はありますか?Oracle - ビューの左結合を実行する方法は?

は、私がこの文

select * from concert_copy c left join event_copy e on c.concert_id=e.concert_id; 

を使用してテーブルを結合を作成することができるようですが、私はこの文を使用してビューを作成するときに私はエラー与えた「ORA-00957を:列名重複」

create view concert_event as select * from concert_copy c left join event_copy e on c.concert_id=e.concert_id; 

答えて

6

する必要があると思います。少なくともconcert_id列は、両方のテーブルに表示されます。 SELECT *は同じ名前の2つの列を持つビューになります。解決策:少なくとも1つのテーブルに対して明示的にフィールドを指定する

create view concert_event as 
    select c.*, e.eventname, ... 
    from 
     concert_copy c 
     left join event_copy e 
      on c.concert_id = e.concert_id; 

重複する名前が他にある場合は、エイリアスを使用します。例えば。あなたが直接SELECTを呼び出す場合、Oracleは自動的に重複したカラムと式のための一般的な名前を作成しますが、ビューにすべての列名は、いずれか、宣言から見えることが必要である:両方のテーブルには、列name

select c.*, e.name as eventname, ... 

注意を持っている場合選択された列の名前と一致するか、エイリアスが与えられたためです。

2

アスタリスク(つまりSELECT *)を使用しないで、選択したすべての列に名前を付けて、それぞれに固有の名前を付けます。 CONCERT_COPYとEVENT_COPY両方がIDという名前の列を持っている場合たとえば、あなたが

select c.id concert_id, e.id event_id, ... 
from concert_copy c left join event_copy e ... 
+0

アスタリスクを使用できません。ダング、私はそれを知らない。 Thx @Littlefoot – sekti92

+2

あなたはすることができますが、それは悪い考えです。特に、実稼働環境で使用されるコードを記述する場合は、すべての列に名前を付ける方がよいでしょう。あなたのコードを維持する必要のある人は、あなたが選んだものを正確に知っているでしょう。 「SELECT *」は*すばやく汚れた*が選択できますが、表示されているように問題が発生する可能性があります。 – Littlefoot

+0

これらの列を更新することは可能でしょうか?なぜビューの各列を更新できないのですか? – sekti92

関連する問題