0

这是我的表,我使用 sql developer oracle

Carowner(车主id, carowner-name,)

汽车(Carid、汽车名称、车主 ID*)

驱动程序(driver_licenceno,驱动程序名称)

比赛(比赛编号、比赛名称、奖金、比赛日期)

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

2 回答 2

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

于 2013-01-14T19:00:51.663 回答
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'

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

于 2013-01-14T19:51:19.710 回答