mysql - 理解下面的MySQL逻辑

标签 mysql sql

这是一段 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/

相关文章:

mysql - 生成具有重复间隔的日期列表

两张表的sql查询

mysql - ZeosLib DataSets 是否需要执行 FetchAll 方法才能返回真实的总行数?

mysql - TIME_FORMAT 返回 NULL

mysql - 更改MySQL中所有表的小数位数

mysql - 使用 phpMyAdmin 访问多个远程服务器

mysql - 汇总表格的一列并将总和转移到另一个表格

php - 单击链接时显示 My SQL 查询

mysql - 根据发送mysql通知的次数查找用户

mysql - 从 MySQL 数据库中选择多个重复字段