Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何选择相同“userid”的其他字段具有特定值的行?_Mysql - Fatal编程技术网

Mysql 如何选择相同“userid”的其他字段具有特定值的行?

Mysql 如何选择相同“userid”的其他字段具有特定值的行?,mysql,Mysql,我有这种桌子(简化): 并希望选择所有订单,其中每个用户ID的状态为IN('A','B'),但在('C','D')中根本没有订单 因此,上述数据的输出将给出ID=1、2和3的订单。用户ID=10有订单A和B,但没有订单C或D 换言之:为订单状态为A或B,但没有状态为C或D的客户选择订单 我从这个开始: SELECT xcart_orders.orderid, xcart_orders.* FROM xcart_orders JOIN (

我有这种桌子(简化):

并希望选择所有订单,其中每个
用户ID的状态为
IN('A','B')
,但在('C','D')中根本没有订单

因此,上述数据的输出将给出ID=1、2和3的订单。用户ID=10有订单A和B,但没有订单C或D

换言之:为订单状态为A或B,但没有状态为C或D的客户选择订单

我从这个开始:

SELECT 
    xcart_orders.orderid, 
    xcart_orders.*          
    FROM xcart_orders 
    JOIN (
        select count(*) as bad_statuses, userid from xcart_orders 
        where status in ('C','D') 
        group by userid 
    ) bo 
    ON bo.userid=xcart_orders.userid 
    JOIN (
        select count(*) as good_statuses, userid from xcart_orders 
        where status in ('A','B') 
        group by userid 
    ) bo2 
    ON bo2.userid=xcart_orders.userid 
    WHERE bo2.good_statuses>0 and bo.bad_statuses=0  

但是想一想,
count(*)
对于“坏”状态不会返回零,所以我没有得到任何结果。

您有一个没有
分组依据的聚合,为了检查结果,您需要我们
拥有
而不是
WHERE

SELECT 
    xcart_orders.orderid, 
    xcart_orders.*, 
    SUM(CASE WHEN xcart_orders.status in ('C','D') THEN 1 ELSE 0 END) AS bad_statuses, 
    SUM(CASE WHEN xcart_orders.status in ('A','B') THEN 1 ELSE 0 END) AS good_statuses 
FROM xcart_orders 
GROUP BY orderid
HAVING bad_statuses = 0 
   AND good_statuses > 0 
请注意,您从
xcart\u订单中获得的字段。*
将是随机的(或不确定的),如果您需要某个特定字段,则需要先订购

  • 首先,根据
    user\u id
    分组,检查是否有与
    'A','B'

  • 然后从那些
    用户id
    中选择订单:

输出


我总是得到状态好坏之和0或1,有点不对劲。要求和的订单必须具有相同的
用户ID
。我是否必须再次连接同一个表来计算总和?您能否提供一些数据和预期输出?我可以给你一个更具体的答案。我已经添加了我的新查询,你能帮我吗?检查新查询。我结束了所有状态的计算,只有良好状态(有2个连接),而不是比较数字是否相同。谢谢
SELECT 
    xcart_orders.orderid, 
    xcart_orders.*, 
    SUM(CASE WHEN xcart_orders.status in ('C','D') THEN 1 ELSE 0 END) AS bad_statuses, 
    SUM(CASE WHEN xcart_orders.status in ('A','B') THEN 1 ELSE 0 END) AS good_statuses 
FROM xcart_orders 
GROUP BY orderid
HAVING bad_statuses = 0 
   AND good_statuses > 0 
SELECT `user_id`
FROM orders1
GROUP BY `user_id`
HAVING COUNT(*) = COUNT(CASE WHEN `status` IN ('A', 'B') THEN 1 END);


SELECT *
FROM orders1
WHERE `user_id` IN (SELECT `user_id`
                    FROM orders1
                    GROUP BY `user_id`
                    HAVING COUNT(*) = COUNT(CASE WHEN `status` IN ('A', 'B') THEN 1 END)
                   );