2017-09-24 228 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)