MySQL - 选择有限制的行

时间:2018-06-13 21:15:03

标签: mysql select subquery

如何根据条件(使用IN或任何其他条件)选择一定数量的行,如果条件返回的行数小于LIMIT x,则为从Stillig行中选择,直到满足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列不为空。

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

检查ord中是否ORDER BY为空:

SELECT *
FROM table
ORDER BY ord IS NULL, ord, id
LIMIT 3
对于非空ord IS NULL

0将为ord,对于空1ord将为ord,因此这将首先放入所有非空行。在id之内,其余部分将按LIMIT 3排序。

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