2016-10-16 2 views
0

Я новичок в 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; 

Когда я включаю его в INNER 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

Потому что вам не хватает alias имя в TripID

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

Также нет выигрыш в производительности при использовании одного над другим. Explicit Join более читабельна, чем неявное соединение. Оба будут иметь одинаковые планы выполнения.

+0

Большое спасибо за указание на мою глупую ошибку. Другой вопрос: какой самый чистый способ создать такие длинные запросы в Java, вместо того, чтобы использовать String? Есть ли способ лучше? Спасибо – user2070333

+0

@ user2070333 - Я парень базы данных, не уверенный в Java –