救命呀!创建索引视图问题.在线等,召唤大侠回复!!!!
在线等,非常急!!!!召唤大侠回复!!!!
一、存在四个表如下:
1.会话表dbo.tdimDialog
------------------------------------------
会话ID nID bigint
...
------------------------------------------
2.会话参与者dbo.tdimDialogParter
------------------------------------------
会话ID nIDMast bigint
流水号 nIDDt bigint
参与者id nParterID bigint
最后读取时间戳 dReadLast datetime
------------------------------------------
3.会话消息dbo.tdimDialogDt
----------------------------
会话ID nIDMast bigint
消息流水号 nIDDt bigint
发出者ID nSenderID bigint
消息内容 cMsg varchar(255)
发出时间 dSend datetime
------------------------------------------
4.会话消息接收者dbo.tdimDialogDtReceiver
------------------------------------------
消息流水号 nIDDt bigint
流水号 nIDDtDt bigint
接收者ID nReceiverID bigint
------------------------------------------
二、需要创建一个可以创建唯一索引的视图,
视图需要实现显示未读消息,逻辑为:
(接收者已参与会话&最后读取时间戳<=发出时间)|(接收者未参与会话)
三、我已实现如下视图,但包含一些元素导致无法创建唯一索引,如UNION和子查询。
如果用UNION的前部分创建视图是可以建立唯一索引的,但这也仅仅是解决了UNION问题,
而没有解决子查询问题。视图语法如下:
------------------------------------------
create view vMsgUnread WITH SCHEMABINGING
as
select
接收者.nReceiverID,
消息.nSenderID,
会话.nID,
消息.nIDDt,
消息.cMsg,
消息.dSend
FROM dbo.tdimDialog 会话
INNER JOIN dbo.tdimDialogDt 消息
ON 会话.nID = 消息.nIDMast
INNER JOIN dbo.tdimDialogDtReceiver 接收者
ON 消息.nIDDt = 接收者.nIDDt
INNER JOIN dbo.tdimDialogParter 参与者
ON 会话.nID = 参与者.nIDMast
AND 接收者.nReceiverID = 参与者.nParterID
AND 消息.dSend >= 参与者.dReadLast
UNION
select
接收者.nReceiverID,
消息.nSenderID,
会话.nID,
消息.nIDDt,
消息.cMsg,
消息.dSend
FROM dbo.tdimDialog 会话
INNER JOIN dbo.tdimDialogDt 消息
ON 会话.nID = 消息.nIDMast
INNER JOIN dbo.tdimDialogDtReceiver 接收者
ON 消息.nIDDt = 接收者.nIDDt
WHERE NOT EXISTS(SELECT 1 FROM dbo.tdimDialogParter 参与者
WHERE 参与者.nIDMast=会话.nID AND 参与者.nParterID=接收者.nReceiverID)
------------------------------------------
需要创建唯一索引语法如下:
------------------------------------------
create unique clustered index IDXC_vMsgUnread
ON vMsgUnread(nReceiverID, nSenderID, nID, nIDDt)
------------------------------------------
在线等,非常急!!!!召唤大侠回复!!!!
一、存在四个表如下:
1.会话表dbo.tdimDialog
------------------------------------------
会话ID nID bigint
...
------------------------------------------
2.会话参与者dbo.tdimDialogParter
------------------------------------------
会话ID nIDMast bigint
流水号 nIDDt bigint
参与者id nParterID bigint
最后读取时间戳 dReadLast datetime
------------------------------------------
3.会话消息dbo.tdimDialogDt
----------------------------
会话ID nIDMast bigint
消息流水号 nIDDt bigint
发出者ID nSenderID bigint
消息内容 cMsg varchar(255)
发出时间 dSend datetime
------------------------------------------
4.会话消息接收者dbo.tdimDialogDtReceiver
------------------------------------------
消息流水号 nIDDt bigint
流水号 nIDDtDt bigint
接收者ID nReceiverID bigint
------------------------------------------
二、需要创建一个可以创建唯一索引的视图,
视图需要实现显示未读消息,逻辑为:
(接收者已参与会话&最后读取时间戳<=发出时间)|(接收者未参与会话)
三、我已实现如下视图,但包含一些元素导致无法创建唯一索引,如UNION和子查询。
如果用UNION的前部分创建视图是可以建立唯一索引的,但这也仅仅是解决了UNION问题,
而没有解决子查询问题。视图语法如下:
------------------------------------------
create view vMsgUnread WITH SCHEMABINGING
as
select
接收者.nReceiverID,
消息.nSenderID,
会话.nID,
消息.nIDDt,
消息.cMsg,
消息.dSend
FROM dbo.tdimDialog 会话
INNER JOIN dbo.tdimDialogDt 消息
ON 会话.nID = 消息.nIDMast
INNER JOIN dbo.tdimDialogDtReceiver 接收者
ON 消息.nIDDt = 接收者.nIDDt
INNER JOIN dbo.tdimDialogParter 参与者
ON 会话.nID = 参与者.nIDMast
AND 接收者.nReceiverID = 参与者.nParterID
AND 消息.dSend >= 参与者.dReadLast
UNION
select
接收者.nReceiverID,
消息.nSenderID,
会话.nID,
消息.nIDDt,
消息.cMsg,
消息.dSend
FROM dbo.tdimDialog 会话
INNER JOIN dbo.tdimDialogDt 消息
ON 会话.nID = 消息.nIDMast
INNER JOIN dbo.tdimDialogDtReceiver 接收者
ON 消息.nIDDt = 接收者.nIDDt
WHERE NOT EXISTS(SELECT 1 FROM dbo.tdimDialogParter 参与者
WHERE 参与者.nIDMast=会话.nID AND 参与者.nParterID=接收者.nReceiverID)
------------------------------------------
需要创建唯一索引语法如下:
------------------------------------------
create unique clustered index IDXC_vMsgUnread
ON vMsgUnread(nReceiverID, nSenderID, nID, nIDDt)
------------------------------------------
在线等,非常急!!!!召唤大侠回复!!!!
...全文
相关推荐
whcallme:主页上的回调请求模块
叫声 prestashop主页上的回调请求模块
Android聊天机器人之火影忍者
本项目使用图灵机器人接口实现的基于Android的聊天机器人Demo,意在交流学习。
局放起始电压(PDIV)与击穿电压(BDV):绝缘系统设计的核心参数 [特殊字符]
在电力设备绝缘系统设计中,**局放起始电压(Partial Discharge Inception Voltage, PDIV)和击穿电压(Breakdown Voltage, BDV)**是两个至关重要的参数。它们直接反映了绝缘材料的性能和绝缘系统的可靠性,对变压器的设计、制造和运行具有重要指导意义。本文将深入探讨这两项参数的定义、测试方法及其与绝缘设计制造的关系,帮助读者全面理解其在电力设备中的核心作用。
ADS笔记,新旧两组仿真数据进行绘图和列表对比
原理图器件参数的不同,怎么进行对比观看,操作如下。
STM32实战:滑模观测器与PLL锁相环融合的FOC无感控制精解
本文深入解析了STM32平台下结合滑模观测器(SMO)与PLL锁相环的无感FOC控制技术。通过实战案例详细介绍了PLL锁相环在消除SMO高频抖振、提升角度跟踪精度方面的关键作用,并分享了工程调参技巧、C语言实现细节及系统联调方法,为电机控制开发者提供了一套完整的解决方案。


疑难问题
