我在 SQL Server 2012 中有一个三表结构:人员、连接和消息。受影响的架构将是这样的:
人员:Id (pk bigint)、姓名...
连接:Id (pk bigint)、IdPpl1 fk、IdPpl2 fk
消息:Id (pk uniqueidentifier)、Idconnection (fk)、Messagetype (smallint)
在 Connections 表中,IdPpl1 和 IdPpl2 是人员 ID 的 fk。它可能碰巧出现在此表中,但交换了他们的列,例如“两个人”:
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
(注意:消息是单向的,这就是为什么连接表中可能有两行影响相同的两个人:在第一行,一个人是发送者,另一个是接收者,在第二行他们交换)
给定一个人员 ID,我需要一个 SQL 查询来显示“由相互连接的人相互发送的最少连接类型消息”和一个额外的列,指示消息类型是否匹配。对于People Id 101,结果应该是这样的:
Person_id Person_name IdConnection MatchingMsgType
......... ........... ............ ...............
105 John 3 1
106 Peter 9 0
由于 MsgId 24 和 25 出现第一行。与消息 26 和 27 对应的潜在行将不会出现,因为找到了先前匹配的消息类型。由于 MsgIds 28 和 29 出现第二行,将消息类型标记为不匹配。
目前,我得到了所有“与人相关的消息”,并在内存中遍历数据表排序、过滤和操作。
您会选择完整的 SQL 解决方案(我想保留应用层之间的完全隔离)还是更适合数据表迭代?
提前致谢!!