sql - 如何从一个表中获取与另一个表中的所有值匹配的记录

标签 sql oracle relational-division

如何编写一个查询来获取所有驾驶所有可用巴士的司机?

表总线

--------
BUS_ID
--------
1
2
3
4

表驱动程序

-----------------------
BUS_ID  |   DRIVER_NAME
-----------------------
1   |   John
2   |   John
1   |   Max
2   |   Max
3   |   Max
4   |   Max
2   |   Bill
3   |   Ron
4   |   Ron
1   |   Ron
2   |   Ron

在这个例子中它应该返回

DRIVER_NAME
-----------
Max
Ron

注意:不要对查询中的任何值进行硬编码。

我写了以下内容

SELECT DRIVER.DRIVER_NAME
FROM   DRIVER
WHERE  BUS_ID = ALL( SELECT BUS_ID FROM BUS);

最佳答案

分组having子句结合使用:

SELECT D.DRIVER_NAME
  FROM DRIVER D
 GROUP BY D.DRIVER_NAME
HAVING COUNT(*) = (SELECT COUNT(*) FROM BUS);

DRIVER_NAME
-----------
Ron
Max

Demo

关于sql - 如何从一个表中获取与另一个表中的所有值匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56885513/

相关文章:

sql - 给定 3 个键列,从一个表中选择另一表中不存在的所有数据

mysql - sql查询加入

javascript - 在查询生成器 Jquery 中获取 SQL 规则时,“IN”运算符无法正常工作

Oracle plsql 捕获异常

mysql - 如何过滤 SQL 结果中的 has-many-through 关系

mysql - 根据另一个表中的多行搜索一个表

mysql - 查找具有相同特征的元素

sql - 从没有主键的表中删除行,SQL

sql - 使用 SQL 高效插入大量数据

Oracle 11g 重命名。保证是原子的?