日期:2014-05-18  浏览次数:20509 次

一个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