【问题标题】:Mysql query to with multiple entires with status [closed]Mysql查询具有多个状态的条目[关闭]
【发布时间】:2020-05-20 12:50:33
【问题描述】:

我们有一个表,其中 order_id 根据设置的状态多次出现

+-------+------------+-----------------+---------------------+
| id    | order_id   | status          | created_at          |
+-------+------------+-----------------+---------------------+
| 32621 | 0000000881 | AUTHORISED      | 2018-08-06 16:17:38 |
| 32622 | 0000000881 | AUTHORISED      | 2018-08-06 16:46:29 |
| 32623 | 0000000881 | REFUSED         | 2018-08-06 17:18:33 |
| 32624 | 0000000881 | CAPTURED        | 2018-08-06 17:54:10 |
| 32625 | 0000000881 | CAPTURED        | 2018-08-06 18:33:47 |
| 32626 | 0000000882 | REFUSED         | 2018-08-06 19:17:44 |
| 32627 | 0000000882 | AUTHORISED      | 2018-08-06 20:06:25 |
| 32628 | 0000000882 | CAPTURED        | 2018-08-06 21:00:13 |
| 32629 | 0000000883 | REFUSED         | 2018-08-06 21:59:48 |
| 32630 | 0000000883 | CAPTURED        | 2018-08-06 23:05:40 |

我们目前正在查找未设置授权状态的 order_id。

任何建议都可以接受,因为我们对这些查询的了解不足。

谢谢

【问题讨论】:

    标签: mysql sql multiple-columns


    【解决方案1】:

    做聚合:

    SELECT order_id
    FROM table t
    GROUP BY order_id
    HAVING SUM(status = 'AUTHORISED') = 0;
    

    【讨论】:

      【解决方案2】:

      我会使用WHERE NOT EXISTS 子句来查找order_id 不存在AUTHORISED 的值。

      SELECT DISTINCT
       order_id
      FROM yourTable AS t
      WHERE NOT EXISTS
       (
        SELECT 1
        FROM yourTable AS t2
        WHERE t.order_id = t2.order_id
          AND t2.status = 'AUTHORISED'
       );
      

      【讨论】:

        【解决方案3】:

        我会使用一个子句来查找不存在 AUTHORISEDorder_id 值。

        SELECT order_id
        FROM table t
        GROUP BY order_id
        HAVING SUM(status = 'AUTHORISED') = 0;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多