这是我的表,即时通讯使用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 ...
答案 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反模式和非常差的编程技术。它会导致意外交叉连接等错误,并且当事情变得更复杂时更难以阅读和维护。当你清楚地学习时,你需要立即停止这种坏习惯。