SQL查询帮助多连接?

时间:2013-01-14 18:51:35

标签: sql oracle join

这是我的表,即时通讯使用sql developer oracle

Carowner(Carowner id,carowner-name,)

Car(Carid,car-name,carowner-id *)

Driver(driver_licenceno,driver-name)

比赛(比赛号码,比赛名称,奖金,比赛日期)

RaceEntry(Race no *,Car id *,Driver_licenceno *,finishing_position)

我试图列出来执行下面的查询

从今年年初开始,哪些车手在比赛中排名第二。 包括种族名称,驱动程序名称和输出中的汽车名称

我试过了

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 ...

2 个答案:

答案 0 :(得分:0)

首先,当你定义超过3或4个表时,很难习惯where子句中的多个连接。

请改为:

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子句中进行连接,如果你的连接有其他谓词,你将不得不注释掉哪个是你需要回去查看它。

答案 1 :(得分: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'

这假定在特定比赛中只有一辆车和一辆车具有第二名的车位。否则您可能需要更多条件。如果这是您自己的表设计,您需要立即开始学习在表之间的名称中保持一致。这很重要。多个表中的字段应具有相同的名称和数据类型。您还需要停止使用隐式语法。这是ia aSQL反模式和非常差的编程技术。它会导致意外交叉连接等错误,并且当事情变得更复杂时更难以阅读和维护。当你清楚地学习时,你需要立即停止这种坏习惯。