3

我有一个相当简单的数据库,由 4 个表组成:

Table 1: USERS
Columns:  userID, user_name

Table 2: GROUPS
Columns:  groupID, group_name

Table 3 (Junction Table): GROUP_MATRIX
Columns:  userID, groupID

Table 4: Messages
Columns: messageID, message, userID, groupID

我想查询所有消息,结果格式如下:

user_name, message

我形成了这样的查询:

SELECT USERS.user_name, MESSAGES.message
FROM GROUP_MATRIX
JOIN USERS on GROUP_MATRIX.userID = USERS.userID
JOIN MESSAGES on GROUP_MATRIX.userID = MESSAGES.userID

它有点工作,但我得到了一些重复的结果。似乎如果一个 user_ID 多次出现在 GROUP_MATRIX 中,那就是当我得到该用户的重复结果时。显然我不明白我正在尝试做的 JOIN,有人可以帮我理解我做错了什么吗?

4

2 回答 2

3

DISTINCTSELECT子句中使用关键字,如下所示:

SELECT DISTINCT USERS.user_name, MESSAGES.message
FROM GROUP_MATRIX
JOIN USERS on GROUP_MATRIX.userID = USERS.userID
JOIN MESSAGES on GROUP_MATRIX.userID = MESSAGES.userID;
于 2013-02-14T07:07:58.913 回答
2

由于您只需要用户名和消息,因此您不想使用组和联结表。

Select 
   us.user_name, msg.message 
   from Messages as msg 
   LEFT JOIN USERS as us ON (msg.userID = us.userID)
   groupby msg.messageID
于 2013-02-14T06:53:52.617 回答