2017-04-20 23 views
1

我試圖讓它顯示,但每次我嘗試它時,它都會顯示「空集」而不是向我顯示我需要的內容。 Here is an image of the database schema在MYSQL中使用JOIN語句來顯示來自兩個不同表的數據

這裏是正在問我的:

構造SQL語句,找出所有message.sender_id = 1發來的消息。注意:您必須使用WHERE子句來設置此查詢的條件。顯示以下欄: - 發件人的名字 - 匯款人姓 - 接收器的名字 - 接收器的姓氏 - 消息ID - 消息 - 消息時間戳

這是我來到了MySQL代碼與,但正如我所說,它只返回和空集。

SELECT 
person.first_name AS "Sender's first name", 
person.last_name AS "Sender's last name", 
person.first_name AS "Receiver's first name", 
person.last_name AS "Receiver's last name", 
message.message_id AS "Message ID", 
message.message AS "Message", 
message.send_datetime AS "Message Timestamp" 
FROM message 
JOIN person ON message.sender_id = person.person_id AND message.receiver_id = person.person_id 
WHERE message.sender_id = 1; 

我無法弄清楚如何爲個人表得到的第一個和最後一個名稱,顯示基於消息表發送者和接收者ID。

任何幫助將是偉大的!謝謝!

+0

@AndySavage提供了下面的解決方案,但是你的查詢有效地做的是找到發送者和接收者都是'person'的地方,其中'person_id = 1' – jmoerdyk

回答

1

您需要加入person兩次。一個加入以獲取發件人信息,另一個收件人。由於您使用同一個表兩次,您需要在查詢中將其別名。喜歡的東西...

SELECT 
    msg_sender.first_name AS "Sender's first name", 
    msg_sender.last_name AS "Sender's last name", 
    msg_receiver.first_name AS "Receiver's first name", 
    msg_receiver.last_name AS "Receiver's last name", 
    message.message_id AS "Message ID", 
    message.message AS "Message", 
    message.send_datetime AS "Message Timestamp" 
FROM message 
JOIN person AS msg_sender ON message.sender_id = msg_sender.person_id 
JOIN person AS msg_receiver ON message.receiver_id = msg_receiver.person_id 
WHERE message.sender_id = 1; 
0

您需要join的人的兩倍,下面應該工作:

SELECT s.first_name, s.last_name, r.first_name, r.last_name, m.message_id, m.send_datetime, m.message 
FROM person s JOIN message m ON s.person_id = m.sender_id 
JOIN person r ON m.receiver_id = r.person_id 
WHERE s.person_id = 1; 
相關問題