我正在尝试掌握 NOT EXISTS 的窍门,但遇到了一些麻烦。假设我有 2 张 table 。Employees:+------+------+| eid | name |+------+------+| 1 | Bob || 2 | Alice|| 3 | Jill |+------+------+Transactions:+----------+----------+----------+-----------+| tid | eid | type | amount |+----------+----------+----------+-----------+| 1 | 1 | Deposit | 50 || 2 | 1 | Open | 500 || 3 | 3 | Open | 200 || 4 | 2 | Withdraw | 25 || 5 | 2 | Open | 100 |+----------+----------+----------+-----------+假设我想查找所有未开设任何金额为 250 美元或更高的帐户的员工的姓名。这意味着我只想要员工开设的帐户金额 现在我有这样的事情......SELECT name FROM Employees eWHERE NOT EXISTS (SELECT * FROM Transactions tWHERE t.type <> 'Open' AND t.amount >= 250 AND t.eid = e.eid);这显然是错误的,我真的不明白为什么。 最佳答案 您需要将 EXISTS 与 NOT EXISTS 结合使用,因为您“只需要员工开设的帐户金额 SELECT name FROM Employees eWHERE EXISTS ( SELECT 1 FROM Transactions t WHERE t.amount < 250 AND t.type='Open' AND t.eid = e.eid)AND NOT EXISTS ( SELECT 1 FROM Transactions t WHERE t.amount >= 250 AND t.eid = e.eid);您需要 EXISTS 以确保仅返回具有金额 NOT EXISTS 以确保不包括具有金额 >= 250 的附加帐户的员工。 Here's a sql-fiddle demo关于mysql - 理解不存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13444621/ 10-12 23:31