gpt4 book ai didi

Mysql:当所有选定的行都符合给定条件时返回 true

转载 作者:行者123 更新时间:2023-11-29 13:19:55 25 4
gpt4 key购买 nike

我有一个具有以下结构的表:

order_rows(row_id, order_id, product_id, ordered_quantity, shipped_quantity)

我编写了以下查询来查找特定订单的所有行是否已发货:

SELECT 1 = ALL (
SELECT O.ordered_quantity = O.shipped_quantity
FROM order_rows O
WHERE O.order_id = 'INSERT_ORDER_ID_HERE'
) AS all_shipped

如果订单的所有行都已完全发货,则该查询基本上会返回一列 (all_shipped),该列填充为 TRUE(否则为 FALSE)。

在MySQL中,是否有任何类型的分组函数,当所有匹配的元素都为true时返回true?我正在考虑这样的事情:

SELECT ALL_TRUE(O.ordered_quantity = O.shipped_quantity) AS all_shipped
FROM order_rows O
WHERE O.order_id = 'INSERT_ORDER_ID_HERE'

这将返回与我的第一个查询相同的结果。

如果这样的函数不存在,是否还有其他更优雅的方法来实现这一点(我正在尝试摆脱子查询)?

最佳答案

您可以使用NOT EXISTS()来测试未发送的行:

SELECT not exists (
select *
FROM order_rows O
WHERE O.order_id = 'INSERT_ORDER_ID_HERE'
AND O.ordered_quantity != O.shipped_quantity)

如果所有行都“已发货”,则返回 1 (true),否则返回 0 (false)。

这应该表现得很好,因为扫描应该在未发送的第一行处停止。

关于Mysql:当所有选定的行都符合给定条件时返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20991833/

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