MYSQL选择连续记录是有条件的
比如说MYSQL选择连续记录是有条件的,mysql,Mysql,比如说 No Condition 1 NULL 2 O 3 NULL 4 NULL 5 NULL 6 NULL 7 NULL 8 O 9 NULL 10 NULL 11 NULL 1
No Condition
1 NULL
2 O
3 NULL
4 NULL
5 NULL
6 NULL
7 NULL
8 O
9 NULL
10 NULL
11 NULL
12 O
想要选择带NULL条件的No的SQL是什么,它下面的两条记录也有NULL条件
对于此表,应选择3、4、5和9。假设
no
是连续的,没有间隙(如示例数据中),则可以使用join
:
select t.no
from t join
t1
on t1.no = t.no + 1 join
t2
on t2.no = t.no + 2
where t.condition is null and
t1.condition is null and
t2.condition is null;
假设
No
字段没有间隙(如问题中所示),在增加No
值时自行加入表3次,并选择所有条件
字段为空的记录:
select t1.No
from yourtable t1
inner join yourtable t2 on t1.No+1=t2.No
inner join yourtable t3 on t1.No+2=t3.No
where t1.Condition is null and t2.Condition is null and t3.Condition is null
一种选择是使用相关子查询来检索下两行的条件列的值。例如:
SELECT t1.no
FROM mytable t1
WHERE t1.condition IS NULL
AND ( SELECT (t2.condition IS NULL)
FROM mytable t2
WHERE t2.no > t1.no
ORDER BY t2.no
LIMIT 0,1
)
AND ( SELECT (t3.condition IS NULL)
FROM mytable t3
WHERE t3.no > t1.no
ORDER BY t3.no
LIMIT 1,1
)
ORDER BY t1.no
这不一定能提供最佳性能。但这是有效的MySQL语法,它确实返回指定的结果集
这假设如果“否”列中存在间隙,目的是检查具有较高值的No
的下两行。如果规范仅检查行No+1
和No+2
,则>t1.No
可以替换为=t1.No+1
和=t1.No+2
,并将限制1,1
替换为限制0,1