如何格式化这个MySQL查询?

时间:2015-04-20 22:29:54

标签: mysql

我有一个表帖子,其中包含 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]

但是这给了我每个用户的副本。

我的查询也有可能是正确的,而且我已经在其他地方搞过什么......

4 个答案:

答案 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)

更好的是使用注释notIN之后突出显示,以防止重复值。那就是它。