2017-04-22 13 views
-1

私はクエリを作成して重複がないようにしたいが、私は何回か3回重複してしまい、DISTINCTまたはDISTINCTROWを使用したときは2つしか重複しない。私はINNER JOINを使用したときに、私はすべてのフライトや遅れたりキャンセルされてしまった便だけでなく、見てみたかったので、私は私が見せたかった事のいくつかを逃したので重複した結果のないSQLクエリにアクセスする

SELECT f.flight_code, 
     f.status, 
     a.airport_name, 
     a1.airport_name, 
     f.departing_date+f.departing_time AS SupposedDepartingTime, 
     f.landing_date+f.landing_time AS SupposedLandingTime, 
     de.actual_takeoff_date+de.actual_takeoff_time AS ActualDepartingTime, 
     SupposedLandingTime+(ActualDepartingTime-SupposedDepartingTime) AS ActualLandingTime 
FROM 
(((Flights AS f 
    LEFT JOIN Aireports AS a 
     ON a.airport_code = f.depart_ap) 
    LEFT JOIN Aireports AS a1 
     ON f.target_ap = a1.airport_code) 
    LEFT JOIN Irregular_Events AS ie 
     ON f.flight_code = ie.flight_code) 
    LEFT JOIN Delay_Event AS de 
     ON ie.IE_code = de.delay_code; 

はJOINをLEFTを使用する必要がありました。

これはINNER JOINを使用した場合の結果で、「ביטול」または「עיכוב」のステータスを持つフライトのみが表示されます。

the results with LEFT JOIN とするとき、あなたはそれが表示される最初の列のNUMBER 6と行を参照してください。ここで、iは2回だけ

重要DISTINCTを使用! 私は自分のクエリとそこに使用するすべてのテーブルをチェックして、私は自分の問題を見ましたが、それを修正する方法は分かりません! テーブル内Irregular_Events私はフライト3,6,8のイベントが1つ多いので、LEFT JOINを使用すると、私はさらに別のものを見ることができます。私には何か助けてください!

+1

使用'SELECT DISTINCT'。 –

+1

あなたは読んでくださいできませんか?私はそれを使用して書いたが、それは良いwasnt。 だから、もし私が次の時間に答える前に読んだリースのコードでそれを示していないのであれば? –

+3

交戦的な態度は、誰かが提供し、答えを出す確率を上げません。 – lit

答えて

0

出力のサンプルがなく、テーブルの構造についての説明がなくても、クエリの問題点を特定するのは難しいです。

しかし、あなたの問題は、あなたがに複数の可能性もある複数のirregular_eventsにリンクすることができるflightsテーブルからクエリしていることです。

1つのフライトにつき1つの行しか取得しない場合は、結合が1つの行だけを返すようにする必要があります。たぶん、結合に条件をもう1つ追加するか、サブクエリに条件を追加することでそれを行うことができます。テーブル構造を見ることなく

GROUP BY 
     f.flight_code, 
     f.status, 
     a.airport_name, 
     a1.airport_name; 
+0

便は複数の 'irregular_events'にリンクすることができますが、' irregular_events'はそれぞれ 'delay_event'にリンクすることができます。 'irregular_events'と' delay_event'を使って、飛行がキャンセルされたか遅れているかどうかを知ることができます。その後、各飛行の実際の離陸時刻と着陸時刻を表示できます。 しかし、私はインナージョインを使用した場合、遅延便とキャンセル便が表示され、それが私が望んでいたものではないので、私はLEFT JOINを使用し、次にいくつかの場所に3つの重複を持っています –

+0

@DoronTayarは私の編集を参照してください。 –

1

全くわからないが、これはうまくいくかもしれない:あなたは、クエリにGROUP BYを追加しようとすることができ

EDIT

SELECT f.flight_code, 
     f.status, 
     a.airport_name, 
     a1.airport_name, 
     f.departing_date+f.departing_time AS SupposedDepartingTime, 
     f.landing_date+f.landing_time AS SupposedLandingTime, 
     de.actual_takeoff_date+de.actual_takeoff_time AS ActualDepartingTime, 
     SupposedLandingTime+(ActualDepartingTime-SupposedDepartingTime) AS ActualLandingTime 
FROM 
((Flights AS f 
    LEFT JOIN Aireports AS a 
     ON a.airport_code = f.depart_ap) 
    LEFT JOIN Aireports AS a1 
     ON f.target_ap = a1.airport_code) 
    LEFT JOIN 
    (
    SELECT 
    ie.flight_code, 
    de1.actual_takeoff_date, 
    de1.actual_takeoff_time 
    FROM 
    Irregular_Events ie 
    INNER JOIN Event AS de1 
     ON ie.IE_code = de1.delay_code 
    ) AS de 
     ON f.flight_code = de.flight_code 
関連する問題