如何在MySQL中的特定行业中选择具有特定条件的行?

Use*_*Mat 2 mysql sql

我在mysql中有一个包含两列的表.身份证号码.第一次列出4到13之间的所有行

SELECT * FROM table WHERE id BETWEEN 4 AND 13

现在我有一个从4到13的所有行的列表.(绿色行)

我想在这个列表中搜索,找到数字<= 10的第一行和数字<= 1000的最后一行以及中间的所有行.即我需要下图所示的橙色行:

在此输入图像描述

所以,我需要这样的东西:

SELECT *
FROM TABLE
WHERE id BETWEEN 4 AND 13
  AND number
  START
  FROM <= 10
  AND END WITH <= 1000
Run Code Online (Sandbox Code Playgroud)

但显然上述情况并不正确.我怎样才能获得橙色行?

Gar*_*thD 6

这应该适合你:

SELECT  T.ID, T.Number
FROM    T
        INNER JOIN
        (   SELECT  MIN(CASE WHEN Number < 10 THEN ID END) AS FirstID,
                    MAX(CASE WHEN Number < 1000 THEN ID END) AS LastID
            FROM    T
            WHERE   ID BETWEEN 4 AND 13 
        ) AS ID
            ON ID.FirstID <= T.ID
            AND ID.LastID >= T.ID
Run Code Online (Sandbox Code Playgroud)

关键是子查询 -

SELECT  MIN(CASE WHEN Number < 10 THEN ID END) AS FirstID,
        MAX(CASE WHEN Number < 1000 THEN ID END) AS LastID
FROM    T
WHERE   ID BETWEEN 4 AND 13 
Run Code Online (Sandbox Code Playgroud)

它在给定范围内获得小于10的第一个ID,并且在给定范围内获得小于1000的最后一个ID.然后使用这些ID过滤结果.

关于SQL小提琴的例子