2017-04-20 5 views
1

私はこれを表示しようとしていますが、試すたびに私に必要なものを表示する代わりに "空のセット"と表示されます。MYSQLのJOIN文を使用して2つの異なるテーブルのデータを表示

は= 1 message.sender_idて送信メッセージのすべてを見つけるために、SQLステートメントを構築する:ここでHere is an image of the database schema

は私の求められているものです。注:このクエリの条件を設定するには、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に2回参加する必要があります。送信者情報を取得するための1つの結合、および受信者の1つ。同じテーブルを2回使用しているときは、クエリで別名を付ける必要があります。以下のような何か...

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; 
0

あなたのPERSON_IDのように見えるが、人のテーブル「は1でなければなら形成することを書いた方法" - あなたのメッセージテーブルのsender_idとreceiver_idも" 1 "に等しい必要があります これは非常にスリムなセットです。

Select 
t2.first_name AS "Sender's first name", 
t2.last_name AS "Sender's last name", 
t3.first_name AS "Receiver's first name", 
t3.last_name AS "Receiver's last name", 
t1.message_id AS "Message ID", 
t1.message AS "Message", 
t1.send_datetime AS "Message Timestamp" 
FROM 
    message t1 
JOIN (SELECT first_name, last_name, person_id FROM person) t2 
    ON message.sender_id = t2.person_id 
JOIN (SELECT first_name, last_name, person_id FROM person) t3 
    ON message.receiver_id = t3.person_id 
WHERE 
message.sender_id = 1 

私はこれを実行しませんでしたが、何を書き込むかのアイデアが必要です。

関連する問題