一个SQL取值的问题
有个表如下:
id是主键,pid是另一个表的主键
id pid layer title content datetime
1 1 0 AA AAAA 2007-07-01 19:20
2 1 1 AA AAAA 2007-07-01 19:20
3 1 1 ABC ABCD 2007-07-04 19:20
4 2 0 BB BBBB 2007-08-01 19:20
5 2 1 BB BBBB 2007-08-01 19:20
6 2 1 BCD BCDE 2007-08-05 19:20
其中第一条和第二条纪录是一样的,除了主键和layer值不一样,
第四和第五条也是一样的,除了主键和layer值不一样
现在想取得的效果是:去掉第二条和第五条纪录,取其它的。
也就是在相同的pid纪录里面,如果有两条纪录除id和layer不同,其它都一样的,就去掉layer值是1的那条
------解决方案--------------------是我的话 我查都不要他查入这样的冗淤数据
------解决方案--------------------DELETE FROM [表] where id in(SELECT max(a.id) FROM [表] a ,[表] b where a.pid=b.pid group by a.title having count(a.pid)> 1)
------解决方案--------------------SQL里不是有一个 distinct 的函数去掉相同值的吗?
另外,因为你的自动增长列不同,所以如果select * 的话,是永远不会有相同值的!
------解决方案--------------------mark
------解决方案--------------------select distinct pid,title,content,datetime from table1
------解决方案--------------------select min(id) as id,pid,min(layer) as layer,title,content,datetime
from table1
group by pid,title,content,datetime
------解决方案--------------------select *
from table1 group by pid,title,content,datetime where layer=1