0

Mysql に 2 つのテーブルがあります。

message -> msg_id(pk) and message(varchar)
track_record -> tr_id(pk), msg_id (foreign key), object_id (to whom the message is sent), profile_id(who sent the message)

ここで、object_id を指定して、メッセージと送信者プロファイル ID を提供する単一のクエリを作成したいと考えています。

たとえば、object_id が 1 だとします。

ID 1 のユーザーに送信されたすべてのメッセージを確認したいと思います。

回答を編集して、試したクエリを追加しました

SELECT m.message, u.profile_profile_id FROm `message` as m, `user_track_record` as u 
WHERE msg_id IN 
      (SELECT message_msg_id FROM user_track_record WHERE object_profile_id = 1) 
      and u.profile_profile_id IN 
      (SELECT profile_profile_id from `user_track_record` WHERE object_profile_id = 1)

これを SQL と HQL の両方で行いたい。どんな助けでも感謝します。ありがとう

4

1 に答える 1

0

SQLクエリは非常に複雑です。

簡単なことから始めましょう。

ユーザー1に送信されたすべてのtrack_recordsを選択します。

select tr.* from track_record tr where tr.object_id = 1

ここで、実績にリンクされたメッセージが必要です。これは、結合を使用して行われます。

select tr.*, m.* from track_record tr 
inner join message m on m.msg_id = tr.msg_id
where tr.object_id = 1

ここで、送信者のIDとメッセージの本文のみが必要です。

select tr.profile_id, m.message 
from track_record tr 
inner join message m on m.msg_id = tr.msg_id
where tr.object_id = 1

HQLでは、クエリはほとんど同じです。MessageエンティティとTrackRecordエンティティがあります。TrackRecordには、MessageとManyToOneの関連付けがあります。また、送信者と受信者とのManyToOneアソシエーションもあります

select tr.sender.id, m.message
from TrackRecord tr
inner join tr.message m
where tr.receiver.id = 1
于 2012-05-18T10:40:34.477 に答える