1. A表重复数据 都 在B表中有关联-> 删除A.id较大的一个表B 中的数据,怎么处理?
解决方案 »
- 触发器update操作时inserted表存的什么数据?
- 能否将几条语句用一个 insert代替,谢谢。
- 提问,char(5),nchar(5)这两个字段里分别能存多少个汉字
- 求一个绝对简单的触发器。在线等
- 非常奇怪的一个问题。请大家帮忙看看。
- 问一个关于子查询的问题!
- 关于死锁
- 一个sql语句问题,急,请各位帮忙,50分!!
- 在SQL server中如何得到一个月中不是星期六星期天的天数?怎样写这个SQL语句?
- 怪事?一个存储过程,我用查询管理器 和 此过程中的语句运行得出的值不同!!!!!!
- SQL2000不支持问题!!!!!!!!!!!!!
- 有关SQL 中Left Join 的问题,求大神帮助
2. A表重复数据 在B表中都没有关联-> 删除A.id较大的一个
3.A表重复数据 有一笔 在B表中有关联-> 删除A表中没有关联的哪一个看你这个描叙,相同的记录最多只有2条吗?
id name address
1 zs aaa
2 zs aaa //重复
3 sm bbb //重复,在B表中无关联
4 sm bbb
5 lr ccc
6 lr ccc //重复,在B表中无关联
7 ms ddd
8 xd eeeB:
id fid other
1 1 yyy //情况1
2 2 yyy //情况1
3 4 zzz //情况3
4 7 uuu
需要过滤的A表数据为
2,3,6
B表不管
SELECT 2,'a' UNION ALL
SELECT 3,'a' UNION ALL
SELECT 4,'b' UNION ALL
SELECT 5,'b' UNION ALL
SELECT 6,'c' UNION ALL
SELECT 7,'c';DECLARE @b TABLE(fid int)
INSERT INTO @b(fid) VALUES(2),(4),(5);DELETE FROM @a WHERE id NOT IN (
SELECT MIN(id) AS id FROM @a WHERE id IN (SELECT fid FROM @b)
GROUP BY c1
UNION ALL
SELECT MIN(id) FROM @a a WHERE NOT EXISTS(SELECT 1 FROM @a x WHERE a.c1=x.c1 AND x.id IN (SELECT fid FROM @b))
GROUP BY a.c1
);
SELECT * FROM @a;/*
id c1
----------- ----------
2 a
4 b
6 c
*/
begin tran
delete a
where id not in (select id from
(select a.id,b.fid as id1 , name,a.address ,ROW_NUMBER()over(PARTITION by name,address order by
b.fid desc ,a.id desc ) as n from a left join b on a.id=b.fid) as t
where n=1 )
select * from a
id name address
----------- ---- -------
2 zs aaa
4 sm bbb
6 lr ccc
7 ms ddd
8 xd eee(5 行受影响)
--结果
PS:8楼的答案删除的是ID较小的一个, 不知是否是受排序影响? 不过功能实现了再次感谢2位高人