2017-09-24 176 views
-1

我有兩個表TravelHistoryLikesToVisitSQL查詢循環通過

兩者都有兩個字段,SSNAirportId

如果客戶訪問了所有他喜歡訪問的城市,查詢的內容是什麼?

任何幫助,非常感謝。

回答

0

這將給你沒有去過所有喜歡的人的清晰列表。

SELECT * FROM LikesToVisit AS lv LEFT OUTER JOIN TravelHistory AS th ON lv.SSN = th.SSN AND lv.AirportID = th.AirportID WHERE lv.SSN = NULL 

,或者使用子查詢

SELECT * FROM LikesToVisit AS lv WHERE lv.SSN NOT IN (SELECT SSN FROM TravelHistory AS th WHERE th.SSN = lv.SSN AND th.AirportID = lv.AirportID) 
+0

注意使用'in'與人的名單最DB的往往很是緩慢(尤其是在處理子查詢中的大型記錄集時!)。從個人經驗來看,使用連接通常要快得多。 – user2366842

0

這個查詢會給出一個他喜歡參觀和訪問未還的所有城市。

SELECT SSN, Airportid 
    FROM LikesToVisit 
MINUS 
SELECT SSN, Airportid 
    FROM TravelHistory 

選擇所有不在上述結果集中的SSN會給你誰曾經訪問過的所有他喜歡

SELECT SSN, 'Visited all he liked' 
    FROM Travelhistory 
WHERE SSN not in (select distinct SSN 
        FROM(SELECT SSN, Airportid 
          FROM LikesToVisit 
          MINUS 
          SELECT SSN, Airportid 
          FROM TravelHistory)