我在SQL Server 2012中有三個表結構:人員,連接和消息。受影響的架構會是這樣的:複雜的SQL查詢與數據表迭代和處理
人民:ID(PK BIGINT),名稱...
連接:ID(PK BIGINT),IdPpl1 FK,IdPpl2 FK
消息:身份證(pk uniqueidentifier),Idconnection(fk),Messagetype(smallint)
在Connections表上,IdPpl1和IdPpl2是fk的人Id。它可能發生在相同的「兩個人」出現在該表中,但他們交換柱,E.G:
Id IdPpl1 IdPpl2
.. ...... ......
3 101 105
8 105 101
9 101 106
10 106 101
上述情況是正確的。實際上,這些是表中這些「兩個人」的最大發生率。
Messages表保存哪個「連接」發送消息的信息。
Id IdConnection Messagetype
.. ............ ...........
24 3 1
25 8 1
26 3 2
27 8 2
28 9 3
29 10 2
(注:消息是單向的,這就是爲什麼有可能是影響相同的兩個人的聯繫表中的兩行:第一行上,一個人是發送者和其他接收者,在第二排他們交換)
鑑於人民身份證,我需要一個SQL查詢來顯示「最少連接類型消息互相連接的人互相發送」和一個額外的指示,如果消息類型匹配或不。結果應該是這樣的,爲人編號101:
Person_id Person_name IdConnection MatchingMsgType
......... ........... ............ ...............
105 John 3 1
106 Peter 9 0
第一行出現由於MsgIds 24和25的電勢與行消息26和27對應的將不會出現,因爲先前的匹配爲messageType被找到。 由於MsgIds 28和29,出現第二行,將消息類型標記爲不匹配。
當前,我得到所有「與一個人有關的消息」並遍歷數據表格排序,過濾和操作內存。
你會用一個完整的SQL解決方案(我想保留應用程序層之間的完全隔離)還是更適合數據表迭代?
在此先感謝!
感謝您的輸入@ manu-fatto:在最壞的情況下行數不應超過300行,否則:行不會被刪除! – jonayreyes