2012-05-18 64 views
0

我在Mysql中有兩個表。SQL和HQL從兩個表中檢索數據

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

@JBNizet 能否請你現在回答我的問題一個多對一的關聯? –

+0

我在上面提到過我的表...首先,我試圖在sql查詢中做,然後我會嘗試將其轉換爲hql。我在我的ENTITIES(message和user_track_record)上嘗試的sql現在是問題所在。 –

回答

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,查詢幾乎是相同的。你有一個消息實體和一個TrackRecord實體。 TrackRecord與消息具有ManyToOne關聯。它也有與發送者和接收者

select tr.sender.id, m.message 
from TrackRecord tr 
inner join tr.message m 
where tr.receiver.id = 1 
+0

謝謝......這完全是我的問題。 是的,這是我的問題,我總是去尋找一個複雜的解決方案,你可以建議「方法」,例如你說的「從簡單開始」。 –

+0

上面的hql正在返回對象的列表,因爲我得到它。 我創建了一個包含String消息和Integer senderId的pojo。 我通過 獲取列表Query query2 = session.createQuery(query.toString()); List messages =(List )query2.list(); 有什麼建議嗎? –