2016-04-28 6 views
0

Ich versuche, Daten mit drei Tabellen auszuwählen. Ich muss eine Aktiennummer und ein Vertragsdatum von einem Akteur und einer Vertrags-Tabelle erhalten, wo der Name des Films = x von einer Filmtabelle ist.Auswählen von Daten mit drei Tabellen, die nur zwei Tabellen verbinden

ich getan habe:

SELECT equity_number, contract_date 
FROM actor, 
    contract, 
    film 
WHERE actor.equity_number = contract.equity_number 
    and title = 'x' 

Obwohl ich eine Spalte zweideutig definiert Störung erhalte.

+0

Qualifizieren Sie Spalten überall, wie 'contract.equity_number' anstelle von' equity_number'. – jarlh

+1

Wechseln Sie zu der modernen expliziten 'JOIN'-Syntax anstelle dieser alten, impliziten Komma-getrennten Joins. – jarlh

+0

@jarlh Danke dafür, warum müssen sie angegeben werden, während wenn ich nur die zwei Tabellen verwenden würde, würde ich wegkommen, ohne die Tabelle vor dem Attribut – norskdreamer

Antwort

1

Sie haben keine Beziehung mit der Filmtabelle. Und eine moderne Art und Weise des Schreibens SQL verwenden :)

SELECT a.equity_number, c.contract_date 
FROM actor a 
INNER JOIN contract c on a.equity_number = c.equity_number 
INNER JOIN film f on f.SOMERELATIONSHIPID = c.SOMERELATIONSHIPID 
WHERE f.title = 'x' 
0

ich Ihnen vorschlagen JOINS anstelle der alten durch Kommata getrennte Syntax zu verwenden. Nach dem Festlegen von Aliasen für jede Tabelle und Verwendung dieser Aliase in der Auswahlliste. Etwas wie:

+0

Diese f.title-Bedingung in der WHERE-Klausel bewirkt, dass der letzte LEFT JOIN als normaler innerer Join ausgeführt wird. In die ON-Klausel wechseln, um ein echtes linkes Join-Verhalten zu erhalten. – jarlh

+0

@jarlh danke für den Vorschlag, aktualisierte Antwort. –

+0

Diese Abfrage löst Fehler aus. In Oracle SQL ist das Wort AS zwischen Tabellennamen und Tabellenaliasen unzulässig. Es kann (optional) zwischen Spaltennamen und deren Aliase verwendet werden. – mathguy

Verwandte Themen