2013-01-14 112 views
0

這裏是我的表,即時通訊使用SQL Developer將甲骨文sql查詢有助於多連接?

Carowner(Carowner ID,carowner名)

汽車(Carid,車名,carowner-ID *)

驅動程序(driver_licenceno ,驅動程序名稱)

比賽(比賽沒有,種族名,獎金錢,種族日期)

RaceEntry(賽無*,租車ID *,Driver_licenceno *,finishing_position)

即時試圖列表做下面的查詢

哪些車手今年年初從賽事中排名第二。 lncluding種族名稱,驅動程序名稱和

我試圖

select r.racename, d.driver-name, c.carowner-name 

from race r, driver d, car c, raceentry re 

where re.finishing_position = 2 and r.race-date is ... 
+4

您需要學習正確的連接語法。你能至少用'join's而不是'from'子句中的''來重寫你的查詢嗎? –

+0

我不知道如何連接多個表(超過2) – user1473397

+0

您確定列名中有連字符而不是下劃線嗎?即,driver_name和驅動程序名稱 – Bohemian

回答

0

首先該車的輸出名稱,多個連接在where子句中是很難習慣,當你定義到超過3或4表恕我直言。

而是執行此操作:

Select 
    a.columnfroma 
, b.columnfromb 
, c.columnfromc 
from tablea a 
    join tableb b on a.columnAandBShare = b.columnAandBShare 
    join tablec c on b.columnBandCShare = c.columnBandCShare 

這雖然沒有人會說是你必須使用一個方法,它的表演加入了一個更可讀的方法。

否則,您正在執行where子句中的連接,如果您有其他謂詞與連接,則必須註釋掉哪個是哪個,如果您需要返回並查看它。

+0

所以我正確的是我必須加入4個表格?像在我的「from」 – user1473397

+0

中定義的iive一樣,您已經加入了4個表格但不正確。部分原因是因爲您正在使用隱式聯接,這是一種極其糟糕的編程習慣。 – HLGEM

0

喜歡的東西:

select r.racename, d.driver-name, c.carowner-name 
from race r 
join raceentry re on r.race_no = re.race_no 
join car c on re.car_Id = c.car_id 
join driver d on re.driverliscenceNo = d.driverliscenceNo 
where re.finishing_position = 2 and r.race-date >='20130101' 

這是假設只有一輛車,並在特定的種族finsih地方第二的一名司機。否則您可能需要更多條件。如果這是你自己的桌子設計,你現在需要開始學習如何在你的桌子之間命名。這很重要。多個表中的字段應具有相同的名稱和數據類型。你也需要停止使用隱式語法。這是ia aSQL反模式和非常差的編程技術。它會導致意外交叉連接等錯誤,並且在事情變得更加複雜時更難以閱讀和維護。正如你清楚的知道,你現在需要停止這種壞習慣。