帮忙看一个sql ,谢谢~

千游 2015-04-10 11:54:42
邮箱表
id createTime
1 100
2 200
3 300
4 400


玩家表
uid mailBox
1 1,2
2 3 ,4

mailBox 里面存的是 邮箱表 里面的id ,用 ,分开,现在想要 删除 createTime>100 的邮件数据,并且在玩家表中删除id,比如要删除 createTime>100 的,玩家表结果应该这样: (用一条语句)
uid mailBox
1 1
2
...全文
429 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
千游 2015-04-10
  • 打赏
  • 举报
回复
引用 2 楼 ky_min 的回复:
小调一下
-先更新 玩家表
UPDATE 玩家表
SET mailBox=ISNULL(
(SELECT STUFF((','+CAST(T4.id AS VARCHAR)),1,1,'')
FROM(
	SELECT T1.uid,T1.mailBox
	FROM 玩家表 T1
		JOIN(SELECT id FROM 邮箱表 WHERE createTime>100)T2
			ON ','+T1.mailBox+','LIKE '%,'+CAST(T2.id AS VARCHAR)+',%'
	GROUP BY T1.uid,T1.mailBox
)T3 JOIN(SELECT id FROM 邮箱表 WHERE createTime<=100)T4
			ON ','+T3.mailBox+','LIKE '%,'+CAST(T4.id AS VARCHAR)+',%'
WHERE 玩家表.uid=T3.uid),'')

--删除邮箱表createTime>100的
DELETE 邮箱表 WHERE createTime>100

--如果你愿意多条语句处理,可能会更方便
谢谢,可以不用一条语句,假如现在已经知道要删除的 id 是 (1,2,3,4),现在如何用一条语句删除 user表里mailBox字段含有这些id 的值呢?
还在加载中灬 2015-04-10
  • 打赏
  • 举报
回复
小调一下
-先更新 玩家表
UPDATE 玩家表
SET mailBox=ISNULL(
(SELECT STUFF((','+CAST(T4.id AS VARCHAR)),1,1,'')
FROM(
	SELECT T1.uid,T1.mailBox
	FROM 玩家表 T1
		JOIN(SELECT id FROM 邮箱表 WHERE createTime>100)T2
			ON ','+T1.mailBox+','LIKE '%,'+CAST(T2.id AS VARCHAR)+',%'
	GROUP BY T1.uid,T1.mailBox
)T3 JOIN(SELECT id FROM 邮箱表 WHERE createTime<=100)T4
			ON ','+T3.mailBox+','LIKE '%,'+CAST(T4.id AS VARCHAR)+',%'
WHERE 玩家表.uid=T3.uid),'')

--删除邮箱表createTime>100的
DELETE 邮箱表 WHERE createTime>100

--如果你愿意多条语句处理,可能会更方便
还在加载中灬 2015-04-10
  • 打赏
  • 举报
回复
--你的操作涉及到修改两个表,需要至少两条语句
--先更新 玩家表
UPDATE 玩家表
SET mailBox=ISNULL(
(SELECT STUFF((','+CAST(T4.id AS VARCHAR)),1,1,'')
FROM(
	SELECT T1.uid,T1.mailBox
	FROM 玩家表 T1
		JOIN(SELECT id FROM 邮箱表 WHERE createTime>100)T2
			ON ','+T1.mailBox+','LIKE '%,'+T2.id+',%'
	GROUP BY T1.uid,T1.mailBox
)T3 JOIN(SELECT id FROM 邮箱表 WHERE createTime<=100)T4
			ON ','+T3.mailBox+','LIKE '%,'+T4.id+',%'
WHERE 玩家表.uid=T3.uid),'')

--删除邮箱表createTime>100的
DELETE 邮箱表 WHERE createTime>100

--如果你愿意多条语句处理,可能会更方便
还在加载中灬 2015-04-10
  • 打赏
  • 举报
回复
这个最好处理的方式,先把玩家表的mailBox分开,然后过滤,再合并 现在想想,多语句应该也差不多

22,210

社区成员

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

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