2017-02-08 4 views
0

私の問題がどこにあるのかは分かっていますが、修正方法は不明です。 出発地と到着地が異なる旅行を探しています。しかし、私がコードを書いたやり方は、同じ出発点と到着場所を持つセットだけを返すようにします。この問題についてどうすればいいですか?私はボストンから出発し、ナッソーに到着する旅行を探していますが、旅行のようなコードを使わないでください。mysqlコードが空のセットを返す

SELECT name 
    FROM staff, trip, locations 
    WHERE trip.TripNum = staff.TripNum AND staff.DATE = trip.DATE AND trip.DATE = '2015-08-14' 
    AND (trip.ArrivalLocCode = locations.LocationCode AND locations.Location = "Nassau") 
    AND (trip.DepartureLocCode = locations.LocationCode And locations.Location = "Boston"); 

答えて

3

まずDepartureLocCode = "BOS":FROM句の決して使用コンマ。 常には、適切で明示的なJOIN構文を使用します。これは、SQLを習得している場合に特に当てはまります。あなたは、このように二度の位置のテーブルに参加する必要があり

SELECT name 
FROM staff s JOIN 
    trip t 
    ON t.TripNum = s.TripNum JOIN 
    locations la 
    ON t.ArrivalLocCode = la.LocationCode JOIN 
    locations ld 
    ON t.DepartureLocCode = ld.LocationCode 
WHERE t.DATE = '2015-08-14' AND 
     la.Location = 'Nassau' AND 
     ld.Location = 'Boston'; 
+0

これは非常に便利でした。私はJOINをあなたのおかげで使用することの重要性を学びました。どうもありがとうございました。非常に高く評価。 –

1

あなたの主な問題は、しかし、あなたは2が参加する必要があるということです。 (私は最近の明示的なJOIN構文を使用しました)

SELECT name 
FROM staff s 
inner join trip t on t.TripNum = s.TripNum AND s.DATE = t.DATE 
inner join locations l1 on t.ArrivalLocCode = l1.LocationCode 
inner join locations l2 on t.DepartureLocCode = l2.LocationCode 
WHERE t.DATE = '2015-08-14' 
AND l1.Location = 'Nassau' 
AND l2.Location = 'Boston'; 
1

ロケーションテーブルに2回参加する必要があります。

私は暗黙的な結合のファンではなく、読みやすくすることが難しいため、結合を明示的にしました。

SELECT name 
FROM staff s 
JOIN trip t ON t.TripNum = staff.TripNum 
JOIN locations l1 ON t.ArrivalLocCode = l1.locationCode 
JOIN locations l2 ON t.DepartureLocCode = l2.locationCode 
WHERE s.DATE = t.DATE 
AND t.DATE = '2015-08-14' 
AND l1.location = 'Nassau' 
AND l2.location = 'Boston' 
関連する問題