sql - 相同的查询给出不同的结果

标签 sql database pgadmin

因此,对于学校的作业,我们必须从数据库中提取计数。问题如下,

--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/

相关文章:

php - 如何通过另一个选择结果使用选择命令? (mysql、php)

c# - 安全(加密)困境

python - 无法在 sqlite3 python 中对关闭的游标进行操作

postgresql - 无法与具有可延迟主键的表建立关系

c# - 通过 Entity Framework 执行输出(打印)的SQL查询

java - 准备好的语句未更新记录

sql - 限制 SQL 中的子查询

sql-server - SQL Server 可以在具有 Unix 行结尾的文件中进行 bcp 吗?

ruby-on-rails - 在 Rails 中,模型的实例不会显示在我的表中。当控制台显示 "COMMIT"和 "=>true"时发生了什么?

sql - Postgres 将字符变化视为整数