繁体   English   中英

SQL查询帮助多联接?

[英]sql query help multi joins?

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

Carowner(Carowner ID,Carowner-name,)

汽车(Carid,汽车名称,carowner-id *)

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

比赛(种族,比赛名称,奖金,比赛日期)

RaceEntry(种族编号*,汽车编号*,驾驶员执照编号*,终点排名)

我试图列出来做下面的查询

从今年开始,哪些车手在比赛中排名第二。 在输出中包括种族名称,驾驶员名称和汽车名称

我尝试过

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

首先,当您定义3个或4个以上的表IMHO时,很难习惯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子句中进行连接,并且如果您的连接还有其他谓词,则必须注释掉哪个,如果您需要返回并查看它的话。

就像是:

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'

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM