2016-10-16 4 views
0

に参加し、それは私が、JOIN INNERにそれを回すときSQL参加暗黙的に私はSQLに新しいです

SELECT 
r.TicketNumber, 
r.VendorNumber, 
r.VendorName, 
rd.FromCityCode, 
rd.ToCityName, 
et.TravelDate, 
tc.TotalAmount, 
tc.AmountInvoiced, 
FROM Reservations as r, 
ReservationDetails as rd, 
Trips as t, 
TripCosts as tc 
WHERE r.ProductCode='1' 
AND t.TravelDate < '2016-11-23 00:00:00.0' 
AND t.TravelDate > '2016-10-23 00:00:00.0' 
AND t.TripID = r.TripID 
AND r.ReservationID=rd.ReservationID 
AND t.TripID = tc.TripID; 

を登録しよう暗黙の上でより良いパフォーマンスだため、明示的なJOINを使用してクエリを記述しようとして明示的な

SELECT 
r.TicketNumber, 
r.VendorNumber, 
r.VendorName, 
rd.FromCityCode, 
rd.ToCityName, 
t.TravelDate, 
tb.TotalAmount, 
tb.AmountInvoiced 
FROM Reservations as r 
    JOIN ReservationDetails as rd ON rd.ReservationID=r.ReservationID 
    JOIN Trips as t ON TripID = r.TripID 
    JOIN TripBalances as tb ON tb.TripID = t.TripID 
WHERE r.ProductCode='1' 
AND t.TravelDate < '2016-11-23 00:00:00.0' 
AND t.TravelDate > '2016-10-23 00:00:00.0' 
私はインナークエリを実行すると参加

、私は私が間違って何をやっている

Error: Ambiguous column name 'TripID'. 
SQLState: S0001 
ErrorCode: 209 

を取得していますか?

答えて

1

あなたはTripID

JOIN Trips as t ON t.TripID = r.TripID 
       --^here 

alias名前が欠落しているのでまた別の上で1つを使用してもパフォーマンスの向上はありません。明示的結合は、暗黙的結合よりも読みやすくなります。どちらも同じ実行計画を持っています

+0

私のばかな間違いを指摘してくれてありがとう。もう1つの質問は、文字列を使用する代わりに、Javaでこのような長いクエリを作成する最もクリーンな方法は何ですか?より良い方法がありますか? ありがとう – user2070333

+0

@ user2070333 - Javaについてよくわからないデータベースの人 –

関連する問題