我有一个相当简单的数据库,由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,有人能帮我理解我做错了什么吗?
答案 0 :(得分:2)
由于您只需要user_name和message,因此您不想使用组和联结表。
Select
us.user_name, msg.message
from Messages as msg
LEFT JOIN USERS as us ON (msg.userID = us.userID)
groupby msg.messageID
答案 1 :(得分:2)
在DISTINCT
子句中使用关键字SELECT
,如下所示:
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;