如何根据条件(使用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列不为null,我也总是得到具有ord的行。

有什么帮助吗?

最佳答案

ord中检查ORDER BY是否为空:

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


对于非空ord IS NULL0将为ord;对于空1ord将为ord,因此这会将所有非空行放在第一位。在它们中,它将按id排序,然后其余部分将按LIMIT 3排序。

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

09-25 18:24
查看更多