SQL查询问题

时间:2014-01-19 20:45:11

标签: sql oracle

我有一个小问题。我正在攻读数据库考试,所以我无法真正测试问题中提出的查询。假设我们有这些表:

PlaneModel = {id, number_seats}
Pilot = {id, name, telephone, birth_date}
Plane = {id, name, model}
Flight = {id, date, id_Plane, id_Pilot, duration, origin, destiny}

练习是:建立一个查询,显示所有现有飞行员驾驶的飞机。

我所得到的是这样的:

select p.id from Plane p, Pilot pi, Flight f
where f.id = pi.id_Pilot and f.id_Plane = p.id
group by p.id
having f.id_Pilot in all (select id from Pilot);

但是我不确定这是否有效,因为我无法测试它。这样对吗?如果不是你的建议么?

1 个答案:

答案 0 :(得分:2)

您的查询不正确,因为having f.id_Pilot in all (select id from Pilot) 正确地询问“所有飞行员驾驶”的问题。

相反,你可以要求每个飞机驾驶的不同飞行员的数量与所有已知飞行员的数量相同。此外,您应该将查询的语法切换为ANSI SQL连接语法:

SELECT p.id
FROM Plane p
JOIN Flight f ON f.id_Plane = p.id
JOIN Pilot pi ON f.id = pi.id_Pilot
GROUP BY p.id
HAVING COUNT(DISTINCT pi.id_Pilot) = (SELECT COUNT(*) FROM Pilot)