0

ここに私のテーブルがあります.SQL Developer oracleを使用しています

Carowner(車の所有者ID、車の所有者名、)

車 (Carid、車名、車の所有者 ID*)

Driver(driver_licenceno, ドライバー名)

レース(レース番号、レース名、賞金、レース日)

RaceEntry(レース番号*, カーID*, ドライバー_ライセンス番号*, フィニッシュ_ポジション)

以下のクエリを実行するためにリストしようとしています

今年の初めからレースで2位になったドライバー。出力にレース名、ドライバー名、車名を含む

私は試みました

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つを超えるテーブル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 句で結合を行っており、結合に他の述語がある場合は、戻って確認する必要がある場合は、どれがどれであるかをコメントアウトする必要があります。

于 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'

これは、特定のレースで最終的に 2 位になった 1 台の車と 1 人のドライバーのみを想定しています。それ以外の場合は、さらに条件が必要になる場合があります。これが独自のテーブル デザインである場合は、テーブル間で一貫した名前を付ける方法を今すぐ学習する必要があります。大事です。複数のテーブルにあるフィールドは、名前とデータ型が同じである必要があります。また、暗黙的な構文の使用をやめる必要があります。これは aSQL アンチパターンであり、非常に貧弱なプログラミング手法です。偶発的なクロス結合などのミスにつながり、物事が複雑になると読みにくく、維持しにくくなります。あなたは明らかに学んでいるので、今すぐこの悪い習慣を止める必要があります.

于 2013-01-14T19:51:19.710 に答える