我在Mysql中有两个表。
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中执行此操作。 任何帮助赞赏。感谢
答案 0 :(得分: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