因此,对于学校的作业,我们必须从数据库中提取计数。问题如下,
--19) 有多少个包含“Europe”的时区名称中的机场被用作一条航线的源机场 (source_airport_id),该航线的飞机尾迹为“M”或“L”
这是我想出的代码,
SELECT count(DISTINCT airports.id) FROM airports WHERE timezone_name LIKE '%Europe%' AND id IN
(SELECT source_airport_id FROM routes WHERE id IN
(SELECT id FROM route_aircrafts WHERE aircraft_id IN
(SELECT id FROM aircrafts WHERE wake_size IN ('M', 'L'))));
它返回了 544,而教授的答案返回了 566。
SELECT count (DISTINCT airports.id)
FROM airports, routes, route_aircrafts, aircrafts
WHERE airports.id = routes.source_airport_id
AND routes.id = route_aircrafts.route_id
AND aircrafts.id = route_aircrafts.aircraft_id
AND airports.timezone_name LIKE'%Europe%'
AND aircrafts.wake_size IN ('M', 'L'); --566
对我来说,这两个应该做同样的事情,我不明白为什么答案不同。
最佳答案
要在您的查询中获得相同的答案,您需要:
SELECT count(DISTINCT airports.id) FROM airports WHERE timezone_name LIKE '%Europe%' AND id IN
(SELECT source_airport_id FROM routes WHERE id IN
(SELECT route_id FROM route_aircrafts WHERE aircraft_id IN
(SELECT id FROM aircrafts WHERE wake_size IN ('M', 'L'))));
您使用了主 ID 字段而不是外键 route_id。您得到了大致相似的结果,因为值中肯定有明显的重叠。
关于sql - 相同的查询给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47818742/