我正在尝试合并两个表中的数据。以下是结构:
用户
userID (Primary Key),
firstName,
lastName.
示例数据:
[1, John, Smith]
[2, Steve, Lan]
[3, Matt, Smith]
消息
messageID (Primary Key),
sender_userID,
receiver_userID,
messageBody.
示例数据:
[1, 1, 1, Hello]
[2, 1, 2, Second Message]
[3, 2, 1, ThirdMessage]
[4, 2, 1, FourthMessage]
[5, 3, 3, LastMessage]
现在,我需要显示用户ID及其同事发布/接收的所有消息。
在上面的示例数据中,userID 1是userID 2的同事。因此,如果我查询userID = 1,那么我应该得到消息ID 1,2,3 [自Message.sender_userID IN(1,2)]和4 [自Message.receiver_userID = 1]。不应出现MessageID = 5,因为3不是任何一个的同事。除此之外,它应该为sender_userID打印firstName和lastName, receiver_userID。
具有唯一messageID的结果应为:
Message.messageID,
Users.userID (Sender),
Users.firstName (Sender),
Users.lastName (Sender),
Users.userID (Receiver),
Users.firstName (Receiver),
Users.lastName (Receiver),
Message.messageBody
我知道查询可以使用JOIN完成,但我是SQL的新手,有些人无法获得所需的输出。
任何帮助都将不胜感激。
由于
答案 0 :(得分:0)
假设您的意思是“发件人或收件人= 1”,根据您的逻辑定义“同事”。如果在其他地方定义了同事,我们需要更多信息。
SELECT
M.messageID,
USend.firstName AS firstNameFrom,
USend.lastName AS lastNameFrom,
URrec.userID,
URrec.firstName AS firstNameTo,
URrec.lastName AS lastNameTo,
M.messageBody
FROM
Message M
JOIN
User URrec ON M.receiver_userID = URrec.userID
JOIN
User USend ON M.sender_userID = USend.userID
WHERE
M.receiver_userID = 1 OR M.sender_userID = 1
答案 1 :(得分:0)
我假设您使用列表定义同事。下面(1,2) - 是一份同事名单。
select
mes.MessageId,
usr1.sender_userID SenderUserId,
usr1.firstName SenderFirstName,
usr1.lastName SenderLastName,
usr2.userID ReceiverUserId,
usr2.firstName ReceiverFirstName,
usr2.lastName ReceiverLastName,
mes.messageBody
from Message mes
join Users usr1 on
mes.sender_userID = usr1.userId
join Users usr2 on
mes.receiver_userID = usr2.userId
where
mes.sender_userID in (1,2) or
mes.receiver_userID in (1,2)
[编辑]如果您只需要显示用户1向其同事发送或接收的消息,那么条件是:
where
mes.sender_userID = 1 and mes.receiver_userID in (1,2) or
mes.receiver_userID = 1 and mes.sender_userID in (1,2)
1
- 感兴趣的用户
(1, 2)
- 是同事名单。 (用户1是他自己的同事:))