我需要使用以下逻辑编写查询:
获取state
=“有效”的所有行,其中包含retries
< max_retries
和(从那些符合条件的行)只返回retries
个最少的行。
我有这个问题:
SELECT *
FROM users
WHERE state = 'active'
AND retries < max_retries
AND retries = (SELECT MIN(retries) FROM users);
我的桌子:
+-----------------------------------------+
| id uid retries max_retries state |
+-----------------------------------------+
| 1 Jack 3 5 active |
| 2 Jill 1 3 active |
| 3 John 3 3 active |
| 4 James 0 5 no |
| 5 Jim 2 7 no |
+-----------------------------------------+
在这种情况下,我的查询应该返回包含Jill
的行,因为Jill有:state = active,retries&lt; max_retries和最小重试次数。
但是,我的尝试总会得到一些不正确的结果。 我看了自我加入和联盟等,但我似乎无法弄清楚如何解决它。
[编辑]: 我想我现在已经知道了,但有人可以确认一下吗?
SELECT *
FROM users
WHERE state = 'active'
AND retries =(SELECT MIN(retries) FROM users WHERE retries < max_retries )
答案 0 :(得分:1)
将state
和max_enteies
条件添加到主查询和子查询后,我现在正在实现预期结果。
SELECT
*
FROM
users
WHERE
state = 'active'
AND retries < max_retries
AND retries = (
SELECT
MIN(retries)
FROM
users
WHERE
state = 'active'
AND retries < max_retries
)