伦敦说,我正在尝试编写一个查询,以确定我不能直接从一个城市飞往哪些城市.鉴于架构:
城市:
| c_id | city_name |
航班:
| f_id | departure_city_id | destination_city_id |
目前我的查询返回相反的,即它返回从伦敦有直飞航班的城市
SELECT c2.city_name as "City" FROM flights AS f JOIN cities AS c2 ON f.destination_city_id != c2.c_id JOIN cities AS c ON c.c_id = c.c_id WHERE c.city_name = 'London' AND c.c_id != c2.c_id AND f.departure_city_id = c.c_id;
我原以为要改变它以获得我想要的东西会很容易.
我想改变第三行
JOIN cities AS c2 ON f.destination_city_id = c2.c_id
本来可以做到这一点,但事实并非如此.有帮助吗?
解决方法
cities I can’t fly to directly from a city,say London.
意思是人们可以飞到那里,而不是直接从伦敦飞来.所以通过destination_city_id加入(不是LEFT JOIN)城市到航班:
SELECT DISTINCT c.city_name FROM cities c JOIN flights f ON f.destination_city_id = c.c_id JOIN cities c2 ON c2.c_id = f.departure_city_id WHERE c2.city_name <> 'London';
然后我只需要排除来自伦敦的航班,申请DISTINCT以获得独特的城市名称,我们就完成了.
对这个问题的更复杂的解释是:“你可以从伦敦飞往的城市,而不是直接”但由于这看起来像基本的作业,我不认为他们期望你的递归查询.