gpt4 book ai didi

mysql - SQL 查询中的 ALL 运算符子句

转载 作者:可可西里 更新时间:2023-11-01 08:03:28 25 4
gpt4 key购买 nike

我有这个表架构。

Machine​(machine_id​, size)
Operator​(operator_id​, name)
OperationLog​(machine_id, operator_id, date, comment)
​machine_id: FK(Machine)
operator_id: FK(Operator)

假设我想要一个查询,只提供操作所有 5m2 以上机器的运算符(operator)的姓名

使用 ALL 运算符会给我想要的结果吗?例如,从大小超过 5 台的机器列表中,拥有日志的运算符(operator)必须匹配所有这些机器。

SELECT O.name
FROM Operator O NATURAL JOIN OperationLog L
WHERE L.machine_id​ = ALL (
SELECT M.machine_id​
FROM Machine M
WHERE size >5);

或者我需要像这样进行“双重否定”吗?

SELECT O.name
FROM Operator O
WHERE NOT EXISTS(
SELECT M.machine_id​
FROM Machine M
EXCEPT
SELECT L.machine_id​
FROM OperationLog L NATURAL JOIN Machine M
WHERE L.operator_id = O.operator_id
AND size >5);

我觉得我太复杂了,可能有更好的方法。

最佳答案

计算每个运算符(operator)使用了多少台 (size >= 5) 的不同机器,并将该数字与此类机器的总数进行比较:

SELECT op.name
FROM operator op
INNER JOIN operationlog l
ON op.operator_id = l.operator_id
INNER JOIN machine m
ON l.machine_id
WHERE m.size >= 5
GROUP BY op.name
HAVING COUNT(DISTINCT m.machine_id) = (
SELECT COUNT(*)
FROM machine
WHERE size >= 5
)

关于mysql - SQL 查询中的 ALL 运算符子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42000994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com