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

How to fetch records from a table that matches with all values in the other table

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

TABLE 总线

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

TABLE DRIVER

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

在这个例子中它应该 return

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

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

下面是我写的

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

加入表格,按d.driver_name分组并将条件放在having子句中:

select 
  d.driver_name
from bus b inner join driver d
on d.bus_id = b.bus_id
group by d.driver_name
having count(*) = (select count(*) from bus)

groupinghaving 子句一起使用:

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

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

Demo

试试这个:

SELECT DISTINCT DRIVER_NAME FROM
(SELECT D.DRIVER_NAME, 
COUNT(DISTINCT BUS_ID) OVER (PARTITION BY D.DRIVER_NAME) INDVDL,
COUNT(DISTINCT BUS_ID) OVER () TOTAL
  FROM DRIVER D)
 WHERE INDVDL = TOTAL

-- 更新--

SELECT DISTINCT
    DRIVER_NAME
FROM
    (
        SELECT
            D.DRIVER_NAME,
            COUNT(DISTINCT BUS_ID) OVER(
                PARTITION BY D.DRIVER_NAME
            ) INDVDL,
            B.TOTAL   AS TOTAL
        FROM
            DRIVER D JOIN
            (
                SELECT
                    COUNT(1) AS TOTAL
                FROM
                    BUS
            ) B ON (1=1)
    )
WHERE
    INDVDL = TOTAL;

干杯!!