MySQL - 选择有限制的行

标签 mysql select subquery

如何根据条件(使用 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 NULL,直到达到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 列不为空。

请问有什么帮助吗?

最佳答案

ORDER BY 中检查 ord 是否为空:

SELECT *
FROM table
ORDER BY ord IS NULL, ord, id
LIMIT 3

ord IS NULL 对于非空 ord 将为 0,对于空 ord 为 1 ,所以这会将所有非空行放在前面。其中,它将按 ord 排序,然后其余部分将按 id 排序。

然后 LIMIT 3 将选择所有这些中的前 3 个。

关于MySQL - 选择有限制的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50846387/

相关文章:

mysql - 我如何将选定的查询作为别名用于另一个子查询?

php - WordPress - 更新数据库 - $wpdb->prepare

php - MySQL 从给定的父 ID 检索完整的后代

mysql - SQL Server - 返回 null 的 SELECT 语句

sql - 通过优先考虑分类值来删除重复项

mysql - 内部联接中的临时表与子查询

oracle - 在子查询 (Oracle) 中引用父查询列

php - MySQL 中的自动递增停止了吗?

mysql where inet_aton like %...%

MySql 多列从具有分组的单列表中选择