mysql:一对多组合

zd287kbt  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(327)

下表数据(订单审核)

+------------+-----------------+
|   OrderID  |  shipping_type  |
+------------+-----------------+
|   W1       |   0             |
|   W1       |   2             |
|   W2       |   2             |
|   W3       |   2             |
|   W3       |   2             |
|   W3       |   1             |
|   W4       |   0             |
|   W5       |   1             |
|   W5       |   2             |
+------------+-----------------+

我希望sql提取具有(0或1)和2组合的类型的orderid。在这个例子中,w1、w3、w5是属于这个标准的顺序。假设表名为order\u audit。
请帮我解决这个问题。

pbossiut

pbossiut1#

一种方法是使用这个查询来查找所有具有 shipping_type 为0或1,并且有一个与 shipping_type 第2页。

SELECT OrderID
FROM order_audit a1
WHERE shipping_type IN(0,1) AND
    EXISTS (SELECT *
            FROM order_audit a2
            WHERE a2.OrderID = a1.OrderID AND shipping_type = 2)

演示

j2qf4p5b

j2qf4p5b2#

我们可以尝试通过 OrderID 然后对每个订单组Assert以下两个条件:
有两个(而且只有两个)不同的 shipping_type 当前值
其中之一 shipping_type 值为2
如果上述两个条件都成立,则意味着该命令 (0, 2) 或者 (1, 2) 作为运输组合。

SELECT OrderID
FROM yourTable
WHERE shipping_type IN (0, 1, 2)
GROUP BY OrderID
HAVING
    COUNT(DISTINCT shipping_type) = 2 AND
    MAX(CASE WHEN shipping_type = 2 THEN 1 ELSE 0 END) = 1;

演示

相关问题