对于一个项目,我必须查找特定人员已发送的所有消息。所以,说我有这些表:
人
person_id | first_name | last_name
消息
message_id | sender_id | receiver_id | message
sender_id和receive_id均引用person_id。我必须显示发件人的名字和姓氏,收件人的名字和姓氏以及消息。我在显示发件人姓名和收件人姓名时特别麻烦。
我已经尝试了各种搜索来解决我的问题,但似乎没有任何效果或与我的问题真正相关。我已经看到一些解决方案使用UNION,但是我还没有在课堂上学到这一点。这是我到目前为止的内容:
SELECT p.first_name AS "Sender First Name",
p.last_name AS "Sender Last Name",
p.first_name AS "Reciever First Name",
p.last_name AS "Reciever Last Name",
m.message_id AS "Message ID",
m.message AS "Message",
m.send_datetime AS "Message Timestamp"
FROM message m, person p
WHERE m.sender_id = 1
AND m.sender_id = p.person_id;
那给了我
+-------------------+------------------+---------------------+--------------------+------------+--------------------------------------------+---------------------+
| Sender First Name | Sender Last Name | Reciever First Name | Reciever Last Name | Message ID | Message | Message Timestamp |
+-------------------+------------------+---------------------+--------------------+------------+--------------------------------------------+---------------------+
| Michael | Phelps | Michael | Phelps | 1 | Congrats on winning the 800m Freestyle! | 2016-12-25 09:00:00 |
| Michael | Phelps | Michael | Phelps | 4 | Thanks! You're the greatest sprinter ever | 2016-12-25 09:04:00 |
| Michael | Phelps | Michael | Phelps | 5 | Good luck on your race | 2016-12-25 09:05:00 |
+-------------------+------------------+---------------------+--------------------+------------+--------------------------------------------+---------------------+
因此,发件人的姓名正确,但收件人的名字不正确。如果我将最后一行更改为
AND m.receiver_id = p.person_id;
然后我得到正确的接收方名称,但没有正确的发送方名称。
答案 0 :(得分:2)
您需要两个联接。那就是JOIN
!
SELECT ps.first_name AS "Sender First Name",
ps.last_name AS "Sender Last Name",
pr.first_name AS "Receiver First Name",
pr.last_name AS "Receiver Last Name",
m.message_id AS "Message ID",
m.message AS "Message",
m.send_datetime AS "Message Timestamp"
FROM message m JOIN
person ps
ON m.sender_id = ps.person_id JOIN
person pr
ON m.receiver_id = pr.person_id
WHERE m.sender_id = 1;
注意:
FROM
子句中学习使用逗号。JOIN
语法。FROM
中有两次表。NULL
,请使用LEFT JOIN
,而不是JOIN
。答案 1 :(得分:0)
进行左连接,并使用persion表别名将其与senderid和receiver id结合使用
p.first_name AS "Sender First Name",
p.last_name AS "Sender Last Name",
p2.first_name AS "Reciever First Name",
p2.last_name AS "Reciever Last Name",
m.message_id AS "Message ID",
m.message AS "Message",
m.send_datetime AS "Message Timestamp"
from message m left join
person p
on p.persionid=m.sender_id
left join person p2 on p2.persionid=m.receiver_id
答案 2 :(得分:0)
只需使用内部联接
例如:
Select *
From table1 inner join table2 On tbale1.id=table2.id
创建内部联接的最佳方法是在SSMS应用程序中使用edite查询。