2017-12-30 38 views
0

Wie erstellt man eine Views mit linken Join auf Oracle?Oracle - Wie führt man Links bei Ansichten aus?

Ich bin in der Lage eine Tabelle, um diese Anweisung beitreten erstellen

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

Aber wenn ich Ansichten erstellen, um diese Anweisung gab Fehler mich „ORA-00957: doppelte Spaltennamen“

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

Antwort

6

Mindestens die concert_id Spalte in beiden Tabellen angezeigt. SELECT * würde zu einer Ansicht mit 2 Spalten mit demselben Namen führen. Lösung: Geben Sie die Felder mindestens für eine der Tabellen explizit an

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; 

Wenn es andere doppelte Namen gibt, verwenden Sie Aliase. Z.B. Wenn beide Tabellen eine Spalte name

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

Hinweis haben: Wenn Sie SELECT direkt aufrufen, automatisch Oracle erzeugt generische Namen für doppelte Spalten und Ausdrücke, aber in Aussicht ist es erforderlich, dass alle Spaltennamen aus der Erklärung sichtbar sind, entweder weil sie mit dem Namen einer ausgewählten Spalte übereinstimmen oder weil ein Alias ​​angegeben wurde.

2

Verwenden Sie kein Sternchen (dh SELECT *), sondern ALLE Spalten, die Sie auswählen, und geben Sie jedem einen eindeutigen Namen. Zum Beispiel, wenn beide CONCERT_COPY und EVENT_COPY Spalte ID benannt haben, müssten Sie

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

oh ich kann asterisk nicht verwenden? Dang, das weiß ich nicht. Thx @Littlefoot – sekti92

+2

Sie können, aber das ist normalerweise eine schlechte Idee. Es ist besser, alle Spalten zu benennen, besonders wenn Sie Code schreiben, der in der Produktion verwendet wird. Jemand, der Ihren Code möglicherweise pflegen muss, weiß genau, was Sie ausgewählt haben. "SELECT *" ist OK für * schnell und schmutzig * wählt, aber - wie Sie sehen können - kann es Probleme verursachen. – Littlefoot

+0

ist es möglich, diese Spalte in der Ansicht zu aktualisieren? Warum kann ich nicht jede Spalte in der Ansicht aktualisieren? – sekti92

Verwandte Themen