gpt4 book ai didi

mysql - 理解下面的MySQL逻辑

转载 作者:行者123 更新时间:2023-11-29 18:32:30 25 4
gpt4 key购买 nike

这是一段 MySQL 代码,在其中一个网站的后台运行。

我试图理解 new 列的含义。任何拥有单个订单的客户都会被标记为新客户 = 1 吗?

代码如下:

select
a.id_order,
IF((
SELECT so.id_order
FROM `orders` so
WHERE so.id_customer = a.id_customer
AND
so.id_order < a.id_order
LIMIT 1) > 0, 0, 1) as new // new keyword

FROM `orders` a

LEFT JOIN `customer` c ON
(c.`id_customer` = a.`id_customer`)

最佳答案

首先,让我假设 id_order 永远不会为负数或零。

如果客户的订单 ID 较小,则查询将返回“0”。目的是标记第一个订单。

如果客户只有一个订单,则其值始终为 1,因为子查询将返回 NULL

我会写逻辑:

SELECT o.id_order,
(NOT EXISTS (SELECT 1
FROM orders so
WHERE so.id_customer = o.id_customer AND
so.id_order < o.id_order
)
) as is_first_order
FROM orders o LEFT JOIN
customer c
ON c.id_customer = o.id_customer;

如果所有订单都有客户,则不需要 LEFT JOIN。事实上,JOIN根本没有必要,你可以只使用:

select o.id_order,
(NOT EXISTS (SELECT 1
FROM orders so
WHERE so.id_customer = o.id_customer AND
so.id_order < o.id_order
)
) as is_first_order
FROM orders o ;

关于mysql - 理解下面的MySQL逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45568277/

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