我是MYSQL的新手,我正在寻求帮助,其中NOT IN函数不起作用
select *
from `oc_order`
where `customer_id` NOT IN (
SELECT `customer_id`
FROM `oc_order`
WHERE `order_status_id` LIKE "3"
AND `last_update` > '2022-12-28'
AND `customer_id` > 0
AND `customer_group_id` > 0
);
字符串
我需要找出今年不活跃的客户。你能给予我一些解决这个问题的方法吗?谢谢
我检查了里面没有工作正常:
SELECT `customer_id`
FROM `oc_order`
WHERE `order_status_id` LIKE "3"
AND `last_update` > '2022-12-28'
AND `customer_id` > 0
AND `customer_group_id` > 0
型
1条答案
按热度按时间i7uaboj41#
我需要找出今年不活跃的客户。
您的查询不符合此说明。首先,您应该从客户表中进行选择,因为非活动客户可能在您的查询中使用的订单表中甚至没有条目。
然后定义2023年开始于2012年12月28日午夜之后,这有点特殊:-)当客户有一个在这段时间更新的订单(所以每次更新都意味着客户方面的活动?)并且订单状态匹配某个字符串表达式时,您将客户声明为“活动”。此外,客户ID必须大于零,客户组ID也必须大于零。
一个订单真的可以分配给一个负的客户ID吗?或者这是为了避免未分配的订单(customer ID NULL)?这样的订单可能吗?订单表中的客户组ID代表什么?为什么客户没有在客户表中分配一个组?客户是否可以在每个订单中属于不同的组,或者组ID在这里应该表示什么?顺便说一下,
order_status_id LIKE "3"
是一个奇怪的表达式。首先,你应该使用标准的字符串分隔符,即单引号,而不是双引号。然后,你使用的LIKE
没有任何模式(%
或_
),那么为什么不立即使用=
呢?顺便说一下,日期文字应该以DATE
开头,以符合标准SQL。我期望的查询看起来像这样:
字符串
虽然这可能无法完全回答您的所有问题,但应该足以解决您在查询中遇到的困难。