2014-02-07 209 views
0

不太清楚如何寫這個查詢,我想有人會這麼好心幫助我。相關查詢2012

我有兩個表(列名稱已更改爲安全):

消息表

信息id carbon_copy_id senderid recipientid

carbon_copy表

carbon_copy_id member_id

本質上,我正在寫一個允許抄送副本的電子郵件系統。

  • 當成員向一個收件人發送郵件時,它將一條記錄寫入郵件表,並將碳_copy_id留空。
  • 當成員發送包含多個收件人的電子郵件時,例如對於2個收件人, 我將兩個記錄插入到具有相同碳_copy_id和每個收件人的member_id的碳拷貝表中。然後我插入兩條消息記錄,每個收件人放入消息表中,並將共享的carbon_copy_id插入到碳副本表中。

    從carbon_copy立方厘米 選擇 mt.messageid, mt.carbon_copy_id, oa.member_list 從 message_table公噸 外應用(選擇的東西((選擇 '' +鑄造(cc.member_id爲varchar) 其中cc.carbon_copy_id = mt.carbon_copy_id order by cc.member_id for xml path(''),TYPE).value('。','varchar(max)'),1,2,''))oa( member_list) 其中 的MessageID = id_of_message 爲了通過 的MessageID降序

我會需要這是成員列表中的碳副本不爲空的記錄,一個記錄沒有它,它是空的。

然而,由於上述的範例,這將產生兩個記錄插入一個列表。我所希望做的是有結果集中的兩個記錄合併成一個,並返回一個逗號分隔的carbon_copied會員ID,其中carbon_copy_id在消息記錄不是空的列表。

我們的想法是,返回的消息的列表,並且當該消息是複製的碳不顯示重複的消息。類似於GMAIL的做法。

任何幫助將不勝感激。

回答

0

首先,從設計的角度來看,似乎向後有消息表的外鍵到cc表。它可能應該是另一種方式,cc表引用了您想要存儲其他收件人的郵件的messageid。

也就是說,無論如何,你真的應該在這裏使用兩個查詢 - 一個用於消息,另一個用於cc'd收件人列表。與使用表設計返回逗號分隔列表相比,這是一個更好的解決方案。