如何根据条件(使用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
列不为null,那么我希望选择相应的行,如果不是,我希望从具有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
列不为空。
有什么需要帮忙的吗?
发布于 2018-06-14 06:09:14
在ORDER BY
中检查ord
是否为null
SELECT *
FROM table
ORDER BY ord IS NULL, ord, id
LIMIT 3
对于非null ord
,ord IS NULL
将为0
,对于null ord
,将为1
,因此这将首先放置所有非null行。其中,它将按ord
排序,其余部分将按id
排序。
然后LIMIT 3
将选择所有这些中的前3个。
https://stackoverflow.com/questions/50846387
复制相似问题