选择有限制的行

avwztpqn  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(257)

如何根据条件(使用)选择一定数量的行 IN 或任何其他条件),如果条件返回的行数小于 LIMIT x 然后从剩余行中选择,直到 LIMIT x 满足了吗?
所以,如果我有下表:

id   comment   ord
1    ...       null
2    ...       1
3    ...       2
4    ...       null

那么结果集应该是,使用 LIMIT 3 :

id   comment   ord
2    ...       1
3    ...       2
1    ...       null

如果 ord 列不为空,则我要选择相应的行,如果不为空,则我要从其余行中选择一个或多个 ord 空,直到 LIMIT 3 达到条件。
另一个例子,如果我有下一个表数据:

id   comment   ord
1    ...       3
2    ...       1
3    ...       2
4    ...       null

那么结果集应该是

id   comment   ord
2    ...       1
3    ...       2
1    ...       3

我尝试过以下mysql代码:

SELECT t.* FROM table t 
WHERE 
    t.ord IN (SELECT t1.ord FROM table t1 WHERE t1.ord IS NOT NULL ORDER BY t1.ord ASC) 
    OR 
    t.id IN (SELECT t2.id FROM table t2 WHERE t2.ord IS NULL ORDER BY t2.id ASC)
LIMIT 3;

但我总是能听到 ord NULL ,即使我有一些 ord 列不能为空。
需要帮忙吗?

xmd2e60i

xmd2e60i1#

检查是否 ord 在您的 ORDER BY :

SELECT *
FROM table
ORDER BY ord IS NULL, ord, id
LIMIT 3
``` `ord IS NULL` 将 `0` 对于非空 `ord` ,  `1` 为空 `ord` ,因此这将把所有非空行放在第一位。在那些它将订购 `ord` ,则剩余的将由 `id` .
那么 `LIMIT 3` 将选择所有这些中的前3个。

相关问题