2016-04-28 45 views
0

我想使用三個表格選擇數據。我需要從演員和合約表中獲得股票編號和合約日期,其中電影名稱=電影表中的x。使用三個表格選擇數據只加入兩個表格

我做:

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

雖然我得到含糊不清的錯誤列。

+0

無處不限列,比如'contract.equity_number'而不是'equity_number'。 – jarlh

+1

切換到現代,明確的'JOIN'語法而不是那些舊的,隱含的逗號分隔連接。 – jarlh

+0

@jarlh謝謝你,爲什麼他們必須被指定,而如果我只使用兩個表,我會離開,而不指定表之前的屬性 – norskdreamer

回答

1

您與電影表沒有任何關係。 並利用編寫SQL的一個現代的方式:)

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

我建議你使用JOINS,而不是老用逗號分隔的語法。在它爲每個表設置別名後,在選擇列表中使用這些別名。類似於:

SELECT a.equity_number, 
     c.contract_date 
FROM actor a 
LEFT JOIN contract c ON a.equity_number = c.equity_number 
LEFT JOIN film f ON a.film_id = f.id -- there should be related columns 
      AND f.title = 'x' 
+0

WHERE子句中的f.title條件使最後一個LEFT JOIN作爲常規內部聯接執行。移至ON子句以獲得真正的左連接行爲。 – jarlh

+0

@jarlh謝謝你的建議,更新了答案。 –

+0

這個查詢會拋出錯誤。在Oracle SQL中,表名和表別名之間的單詞AS是非法的。它可以在列名和別名之間使用(可選)。 – mathguy

相關問題