SQL和HQL从两个表中检索数据

时间:2012-05-18 08:44:56

标签: mysql sql hql

我在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中执行此操作。 任何帮助赞赏。感谢

1 个答案:

答案 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