mysql NOT IN返回错误结果,其中

gkn4icbw  于 5个月前  发布在  Mysql
关注(0)|答案(1)|浏览(68)

我是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

i7uaboj4

i7uaboj41#

我需要找出今年不活跃的客户。
您的查询不符合此说明。首先,您应该从客户表中进行选择,因为非活动客户可能在您的查询中使用的订单表中甚至没有条目。
然后定义2023年开始于2012年12月28日午夜之后,这有点特殊:-)当客户有一个在这段时间更新的订单(所以每次更新都意味着客户方面的活动?)并且订单状态匹配某个字符串表达式时,您将客户声明为“活动”。此外,客户ID必须大于零,客户组ID也必须大于零。
一个订单真的可以分配给一个负的客户ID吗?或者这是为了避免未分配的订单(customer ID NULL)?这样的订单可能吗?订单表中的客户组ID代表什么?为什么客户没有在客户表中分配一个组?客户是否可以在每个订单中属于不同的组,或者组ID在这里应该表示什么?顺便说一下,order_status_id LIKE "3"是一个奇怪的表达式。首先,你应该使用标准的字符串分隔符,即单引号,而不是双引号。然后,你使用的LIKE没有任何模式(%_),那么为什么不立即使用=呢?顺便说一下,日期文字应该以DATE开头,以符合标准SQL。
我期望的查询看起来像这样:

select *
from customer c
where not exists
(
  select null
  from oc_order o
  where o.customer_id = c.customer_id
  and o.order_status_id = 3
  and o.last_update > date '2022-12-28'
)
order by c.customer_id;

字符串
虽然这可能无法完全回答您的所有问题,但应该足以解决您在查询中遇到的困难。

相关问题