Mysql 具有特定限制的SQL
我有下一个示例表:Mysql 具有特定限制的SQL,mysql,sql,Mysql,Sql,我有下一个示例表: id | user_id | data ------------------- 1 | 1 | 10 2 | 2 | 10 3 | 2 | 10 4 | 1 | 10 5 | 3 | 10 6 | 4 | 10 7 | 4 | 10 8 | 5 | 10 9 | 5 | 10 10 | 2 | 10 11 | 6 | 10 12
id | user_id | data
-------------------
1 | 1 | 10
2 | 2 | 10
3 | 2 | 10
4 | 1 | 10
5 | 3 | 10
6 | 4 | 10
7 | 4 | 10
8 | 5 | 10
9 | 5 | 10
10 | 2 | 10
11 | 6 | 10
12 | 3 | 10
13 | 1 | 10
我需要创建一个SELECT查询来限制我的数据。例如,我有一个限制范围(1,3)(页码=1,行数=3)。它应该选择具有前3个唯一用户id的行。如果在表的末尾有一些行具有第一个用户id
,则应将它们包括在结果中。LIMIT语句不适合此查询,因为我可以获得3行以上的数据。我的限额的输出应为:
id | user_id | data
-------------------
1 | 1 | 10
2 | 2 | 10
3 | 2 | 10
4 | 1 | 10
5 | 3 | 10
10 | 2 | 10
12 | 3 | 10
13 | 1 | 10
你能帮我生成这个查询吗?像这样的东西怎么样
SELECT * FROM table WHERE user_id BETWEEN (number) AND (number+row count)
我知道它不起作用,但你应该能让它起作用^^像这样的东西怎么样
SELECT * FROM table WHERE user_id BETWEEN (number) AND (number+row count)
我知道它不起作用,但你应该能够让它起作用^^怎么样:
SELECT *
FROM table
WHERE user_id IN
(SELECT distinct(user_id) FROM table order by user_id LIMIT 3);
那么:
SELECT *
FROM table
WHERE user_id IN
(SELECT distinct(user_id) FROM table order by user_id LIMIT 3);
下面的示例代码可用于Oracle和Mysql。(对SQL Server和Sybase使用
TOP
)
您可以从表(t1
)中获得与前3个用户id
(t2
)匹配的所有结果(查看MySQL手册中的限制功能)
对于接下来的3个id,将
限制0,3
更改为限制3,6
以下示例代码可用于Oracle和Mysql。(对SQL Server和Sybase使用TOP
)
您可以从表(t1
)中获得与前3个用户id
(t2
)匹配的所有结果(查看MySQL手册中的限制功能)
对于接下来的3个id,请将
限制0,3
更改为限制3,6
谢谢。是的。但是MySQL版本5.0.5:1此版本的MySQL还不支持根据的“LIMIT&IN/ALL/ANY/SOME子查询”,它们都受支持。至少如果没有“IN”,我想不出一个方法来做这件事。@garvey:对。太糟糕了。你不能更新更新的版本吗?5.0有点过时了。谢谢。是的。但是MySQL版本5.0.5:1此版本的MySQL还不支持根据的“LIMIT&IN/ALL/ANY/SOME子查询”,它们都受支持。至少如果没有“IN”,我想不出一个方法来做这件事。@garvey:对。太糟糕了。你不能更新更新的版本吗?5.0有点过时。如果用户id不符合顺序,这将不起作用。例如,如果表包含user_id 1、2、4,并且缺少user_id 3,则此查询将返回较少的行数。问题提到结果应该包含前3个唯一用户id的行。它表示前3个唯一用户id。因此我假设前3个唯一用户id位于数字(1)之后。在OP的示例中,前3个id是1、2、3,但在其他一些情况下,它们可能是2、5、7(因为1、3、4、6因某种原因被删除)。你的解决方案当时不起作用。确实如此,但它给我的印象是,它是关于一个数字序列的。如果用户id不在序列中,这将不起作用。例如,如果表包含user_id 1、2、4,并且缺少user_id 3,则此查询将返回较少的行数。问题提到结果应该包含前3个唯一用户id的行。它表示前3个唯一用户id。因此我假设前3个唯一用户id位于数字(1)之后。在OP的示例中,前3个id是1、2、3,但在其他一些情况下,它们可能是2、5、7(因为1、3、4、6因某种原因被删除)。你的解决方案当时不起作用。确实如此,但它给我的印象是它是关于一系列数字的。LIMIT
不受Oracle支持——MySQL、SQLite和PostgreSQL支持LIMIT
TOP
仅适用于SQL Server 2000+。LIMIT
不受Oracle支持——MySQL、SQLite和PostgreSQL支持LIMIT
<代码>顶部仅为SQL Server 2000+版本。