【问题标题】:How to write this complex SQL query?如何编写这个复杂的 SQL 查询?
【发布时间】:2016-03-17 18:15:46
【问题描述】:

我需要找到飞机的名称,以便所有获得驾驶执照的飞行员赚取超过 60000 美元。

我写的查询:

select aname 
from employee join certified
on employee.eid=certified.eid
join aircraft
on certified.aid=aircraft.aid
where salary>60000;

但是如果有超过60000薪水的飞行员,它会返回一个名字,困难的部分是我需要找到所有飞行员的收入超过60000才显示名字。

【问题讨论】:

标签: mysql sql join


【解决方案1】:

您可以寻找相反的情况 - 没有飞行员的收入低于 60,000:

SELECT
    aname
FROM
    Aircraft A
WHERE
    NOT EXISTS
    (
        SELECT *
        FROM Certified C
        INNER JOIN Employee E ON
            E.eid = C.eid AND
            E.salary < 60000
        WHERE C.aid = A.aid
    )

【讨论】:

  • 我打字速度变快了 ;)
  • 非常感谢,它真的很有帮助。它证明了还有很多事情谷歌不能告诉你,但人们可以。再次感谢@TomH
  • 还有一个问题,我如何学会自己解决这些问题,您可以推荐任何文字。 @TomH
  • 只是让你的大脑习惯于以新的方式解决问题。我做了很多益智书籍。 :) 此外,了解逻辑等价和逆逻辑也很有用(例如 X AND Y vs. NOT (NOT X OR NOT Y))。
【解决方案2】:
SELECT aname FROM Aircraft where NOT EXISTS (SELECT eid FROM Employee AS e INNER JOIN Certified AS c ON c.eid=e.eid WHERE salary<60000 AND aid=Aircraft.aid)

【讨论】:

    【解决方案3】:

    选择 一个名字 从 飞机 A 在哪里 存在 ( 选择 * FROM 认证 C INNER JOIN 员工 E ON E.eid = C.eid 和 E.salary > 60000 其中 C.aid = A.aid )

    【讨论】:

    • 在@Tom H 的查询中,取所有没有员工的飞机名称
    猜你喜欢
    • 2012-12-24
    • 2016-04-23
    • 2015-08-04
    • 2015-03-28
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多