关于表的结构更改,恳求解决方案

luohanxi 2006-01-19 12:06:48
原来表的用途的存储“公告记录”,表的结构是:
SN_ID,Title,Content,EndTime,其中SN_ID是主键,每增加一条记录,该字段的值自动增1。
原来的设计的访问过程是:每个客户账户(另外有一张表记录客户信息,UserId为主键)访问该表所有记录,根据EndTime(公告时限)读出未过期的记录。

需求变更:
更改数据库结构,在往该表插入记录时同时指定目标客户UserId(一个或多个),使程序根据客户UserId查询该表时可以列出与目标客户UserId相匹配的记录,不匹配的记录在查询时不列出来。

我的方案:增加一个targetUserId字段,记录一个目标客户的UserId,当有公告需要发送给多个目标客户时,插入与目标客户相同个数的记录,如:


SN_ID Title Content EndTime targetUserId
1 通知1 节日快乐 2006-1-1 U0001
2 通知1 节日快乐 2006-1-1 U0002
3 通知1 另一个公告 2008-3-29 U0001


这样,我用一个UserId匹配targetUseId就可以查询出属于该客户的公告
但现在的问题是:当我想查询某个公告的所有记录时,如果我以公告的标题(Title)为查询条件,会查询出多余的记录,因为Title不是主键,可以重复(如记录3),如果我用主键(SN_ID)为查询条件,只能查出一条记录,记录有缺少

我该怎么办才好~~,怎么办才好~~?
...全文
106 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mislrb 2006-01-19
  • 打赏
  • 举报
回复
将 targetUserId 保存为类似 'U0001','U0002'改动也不大,处理起来也不难
samfeng_2003 2006-01-19
  • 打赏
  • 举报
回复
不用改,可以这样查询

declare @t table
(SN_ID int,Title varchar(20),Content varchar(20),EndTime datetime,targetUserId varchar(20))
insert @t

select 1,'通知1','节日快乐','2006-1-1','U0001' union all
select 2,'通知1','节日快乐','2006-1-1','U0002' union all
select 3,'通知1','另一个公告','2008-3-29','U0001'


select * from @t a where not exists
(select * from @t b where a.Title=b.Title and a.Content=b.Content and
a.EndTime=b.Endtime and a.SN_ID>b.SN_ID)
-狙击手- 2006-01-19
  • 打赏
  • 举报
回复
select distinct title from table where title like '%df%'

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧