日期:2014-05-17  浏览次数:20549 次

SQL 查询不重复记录

select * from [Nop_ProductVariantAttributeValue] 
  where [Name] in (select [Name] from [Nop_ProductVariantAttributeValue] group by [Name] having(count(*))=1)

如果Name重复的话 只显示一个 如果不重复的值就全部显示
但是这样写 对比后发现 有几个重复值显示不出来

------解决方案--------------------

--用主键去过滤
select * from [Nop_ProductVariantAttributeValue] a
where not exists
(select 1 from [Nop_ProductVariantAttributeValue] 
where a.name=name and 主键<a.主键)--如果多主键 就主键1+主键2<a.主键1+a.主键2

------解决方案--------------------
select a.* 
from [Nop_ProductVariantAttributeValue] a
inner join 
(select name,min(id) id from [Nop_ProductVariantAttributeValue] group by name) b 
on a.id=b.id

------解决方案--------------------
引用:

--用主键去过滤
select * from [Nop_ProductVariantAttributeValue] a
where not exists
(select 1 from [Nop_ProductVariantAttributeValue] 
where a.name=name and 主键<a.主键)--如果多主键 就主键1+主键2<a.主键1+a.主键2
正解