查询分组最小order(仅NOTSIGNED数据)时为何出现SIGNED状态行?
问题原因及修正方案
问题原因
你的查询只筛选了order等于对应document_id中status='NOTSIGNED'行的最小order值,但没有限制当前行的status必须是NOTSIGNED。
拿document_id=3的情况举例:
- 该文档下
status='NOTSIGNED'的行只有id=6,其order值为0,子查询返回的最小值就是0。 - 而id=5的行
status='SIGNED',但它的order值恰好也是0,满足order=0的条件,所以被错误纳入了结果集。
修正后的SQL查询
需要在主查询的WHERE条件里额外添加status='NOTSIGNED'的过滤逻辑:
SELECT s.* FROM document_signature s WHERE s.status = 'NOTSIGNED' AND `order` = (SELECT MIN(s2.`order`) FROM document_signature s2 WHERE s.document_id = s2.document_id AND s2.status = 'NOTSIGNED');
正确结果展示
执行修正后的查询,会得到符合需求的结果(已排除status='SIGNED'的行):
+----+-------------+-------------+---------+-------+-----------+ | id | document_id | employee_id | user_id | order | status | +----+-------------+-------------+---------+-------+-----------+ | 2 | 1 | 3 | NULL | 1 | NOTSIGNED | | 3 | 1 | 4 | NULL | 1 | NOTSIGNED | | 4 | 2 | 3 | NULL | 0 | NOTSIGNED | | 6 | 3 | 1 | NULL | 0 | NOTSIGNED | +----+-------------+-------------+---------+-------+-----------+ 4 rows in set (0.00 sec)
内容的提问来源于stack exchange,提问作者Yoel Navas Escalante
相关产品推荐
相关产品推荐

