繁体   English   中英

在按另一列排序后,在id之后选择记录

[英]Select records after id after ordering by another column

假设我们有一张按重量排序的桌子

  select id, 
         weight
    from TABLE
order by weight

;

id     weight
---   -------
66     2.50
12    12.00
11    24.00
19    25.00
 6    44.00
 7    45.00
 8    47.00
 9    48.00
10    50.00

我们只想返回大于或等于某个id的权重的记录。 例如,如果我们想要id = 7,那么我们将得到

id     weight
---   -------
 7    45.00
 8    47.00
 9    48.00
10    50.00

或者换句话说,表中所有记录按权重从id = 7的行开始排序。我们不需要权重,我们需要id。

我猜一个简单的内部查询就可以了:

SELECT `id`
FROM   `TABLE`
WHERE  `weight` >= (SELECT `weight`
                    FROM   `TABLE`
                    WHERE  `id` = 7 
                    LIMIT 1)
ORDER BY `id`

如果您想权重大于id 7的记录,那么它将起作用:

  SELECT id, 
         weight 
    FROM TABLE
   WHERE weight >= (SELECT weight 
                      FROM TABLE 
                     WHERE id = 7)
ORDER BY weight

如果您真的想用JOIN而不是子查询来做:

SELECT t1.id, t1.weight
FROM TABLE AS t1
JOIN TABLE AS t2 ON t1.weight >= t2.weight
WHERE t2.id = 7
ORDER BY t1.weight

可以一键完成,但是您必须使用这样的用户定义变量

SELECT id, weight,
       CASE WHEN id = 7 THEN @weight := weight
            ELSE @weight
       END AS compare_weight
FROM `TABLE`
HAVING weight >= compare_weight
ORDER BY weight ASC

http://sqlfiddle.com/#!9/4a846/9

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM