SQLite Join-按每个用户查询最近的帖子
在sqlite数据库中,我有一个Users表,如下所示 用户:SQLite Join-按每个用户查询最近的帖子,sqlite,android-sqlite,Sqlite,Android Sqlite,在sqlite数据库中,我有一个Users表,如下所示 用户: | user_id | user | 1 | John | 2 | Peter a员额表如下: | post_id | user_id | text | 10 | 1 | blah blah blah | 11 | 1 | blah blah blah
| user_id | user
| 1 | John
| 2 | Peter
a员额表如下:
| post_id | user_id | text
| 10 | 1 | blah blah blah
| 11 | 1 | blah blah blah
| 12 | 2 | blah blah blah
| user_id | user | post_id | text
| 1 | John | 10 | blah blah blah
| 1 | John | 11 | blah blah blah
| 2 | Peter | 12 | blah blah blah
SELECT * FROM Users Join Posts Using(user_id) order by post_id desc;
我使用此代码连接两个表:
SELECT * FROM Users JOIN Posts USING ( user_id )
现在,我有一个由不同用户发布的所有帖子的列表,如下所示:
| post_id | user_id | text
| 10 | 1 | blah blah blah
| 11 | 1 | blah blah blah
| 12 | 2 | blah blah blah
| user_id | user | post_id | text
| 1 | John | 10 | blah blah blah
| 1 | John | 11 | blah blah blah
| 2 | Peter | 12 | blah blah blah
SELECT * FROM Users Join Posts Using(user_id) order by post_id desc;
假设post_id较大的帖子是最近发布的。
现在我想要一个由每个用户列出的最新帖子的列表,在本例中是第2行和第3行。
我该怎么做?
我正在考虑删除每个用户的所有行,除了最近具有最大post_id的行之外,这是一个好的解决方案吗?我应该如何查询它?您必须稍微更改一下查询。您必须按如下方式编写查询:
| post_id | user_id | text
| 10 | 1 | blah blah blah
| 11 | 1 | blah blah blah
| 12 | 2 | blah blah blah
| user_id | user | post_id | text
| 1 | John | 10 | blah blah blah
| 1 | John | 11 | blah blah blah
| 2 | Peter | 12 | blah blah blah
SELECT * FROM Users Join Posts Using(user_id) order by post_id desc;
您必须稍微更改查询。您必须按如下方式编写查询:
| post_id | user_id | text
| 10 | 1 | blah blah blah
| 11 | 1 | blah blah blah
| 12 | 2 | blah blah blah
| user_id | user | post_id | text
| 1 | John | 10 | blah blah blah
| 1 | John | 11 | blah blah blah
| 2 | Peter | 12 | blah blah blah
SELECT * FROM Users Join Posts Using(user_id) order by post_id desc;
您可以使用一个内部查询来获取每个用户的最新帖子,然后该表将在与其他两个用户合并时充当过滤器
select *
from users u
join (
select user_id, max(post_id) post_id
from Posts
group by user_id
) r
on u.user_id = r.user_id
join posts p
on r.post_id = p.post_id and
r.user_id = p.user_id
您可以使用一个内部查询来获取每个用户的最新帖子,然后该表将在与其他两个用户合并时充当过滤器
select *
from users u
join (
select user_id, max(post_id) post_id
from Posts
group by user_id
) r
on u.user_id = r.user_id
join posts p
on r.post_id = p.post_id and
r.user_id = p.user_id
在SQLite中,而不是在任何其他数据库中,使用GROUP BY时,可以使用max或min来选择要在组中返回的行:
SELECT user_id,
user,
max(post_id) AS post_id,
text
FROM Users
JOIN Posts USING ( user_id )
GROUP BY user_id;
在SQLite中,而不是在任何其他数据库中,使用GROUP BY时,可以使用max或min来选择要在组中返回的行:
SELECT user_id,
user,
max(post_id) AS post_id,
text
FROM Users
JOIN Posts USING ( user_id )
GROUP BY user_id;
可能重复的可能重复的但我想删除重复的行,这只会更改行的顺序更改查询:从用户U中选择不同的U.user\U id、U.user、P.post-id、P.text,Posts P,其中U.user\U id=P.user\U id按post\U id desc排序;但我想删除重复的行,这只会更改行的顺序更改查询:从用户U中选择不同的U.user\U id,U.user,P.post-id,P.text,Posts P,其中U.user\U id=P.user\U id按post\U id desc排序;这给了我3个重复的列!但是谢谢,我改了一点,效果很好。我删除了最后3行并更改了用户id。。。要使用idThis,我会得到3个重复的列!但是谢谢,我改了一点,效果很好。我删除了最后3行并更改了用户id。。。使用身份证