我有一个表帖子,其中包含 board_id,author_id,message 列。我有另一个表用户,其中列 id,name,avatar_url 。
我需要编写一个查询来获取在给定板上发布的所有用户,没有重复项。查询应返回完整的用户行(id,name,avatar_url)。
我已经尝试了
SELECT DISTINCT users.*, posts.author_id
FROM users
INNER JOIN posts
ON users.id = posts.author_id
WHERE posts.board_id = [desired board ID]
但是这给了我每个用户的副本。
我的查询也有可能是正确的,而且我已经在其他地方搞过什么......
答案 0 :(得分:2)
这是一个简单的查询,可以让您获得没有重复发布活动的用户的所有行
SELECT * FROM USERS
WHERE id IN (SELECT author_id FROM posts WHERE board_id = [desired board]
您还可以使用基本语法,在您需要的所有内容上使用不同的语法,例如:
SELECT DISTINCT users.*
FROM users
JOIN posts ON users.id = posts.author_id
WHERE posts.board_id = [desired board ID]
答案 1 :(得分:0)
只需按用户ID分组,如下所示:
SELECT users.id, MIN(users.name), MIN(users.avatar_url)
FROM users
INNER JOIN posts
ON users.id = posts.author_id
WHERE posts.board_id = [desired board ID]
GROUP BY users.id
答案 2 :(得分:0)
SELECT users.id, users.name, users.avatar_url, posts.author_id
FROM users
INNER JOIN posts
ON users.id = posts.author_id
WHERE posts.board_id = [desired board ID] GROUP BY users.id
这将获取所有找到的行,然后通过userid对它们进行分组,这样每个用户ID只会出现一次,因此每个用户行[谁在板上发布]只会出现一次。
答案 3 :(得分:0)
更好的是使用注释not
在IN
之后突出显示,以防止重复值。那就是它。