sql同名但值不同

标签 sql sql-server

如何检索所有具有相同名称但具有不同值的行?比如我有这张表:

Name|Value|Description
Rob |Val1 |Text1
Alex|Val1 |Text2
Alan|Val2 |Text3
Alex|Val2 |Text4
Alex|Val2 |Text5  
Alan|Val2 |Text6

我希望查询只返回多次出现但具有不同值的人。所以结果是:

Alex|Val1 |Text2 
Alex|Val2 |Text4 
Alex|Val2 |Text5

编辑:我在初始表中添加了另一行。一些查询也将返回 Alan 作为结果的一部分。我不希望那样,因为显然它具有相同的值(value)。如何实现?

最佳答案

尝试将 joinsybqueryhave 一起使用:

  select p.Name,p.Value,p.Description
    from persons P
    join ( select Name,Value
           from persons
            group by Name,Value
            having count(1)>1
          ) c on p.Name = c.Name
              and p.Value = c.Value
    order by p.Name;

exists子句中的相同subquery:

select p.Name,p.Value,p.Description
from persons P
where exists
     ( select Name,Value
       from persons c
        where p.Name = c.Name
        group by Name,Value
        having count(1)>1
      ) 
order by p.Name          

SQL Fiddle演示

更新问题的解决方案

select * 
from Persons c
where name in 
(
select  Name   from(
       select Name,Value 
       from persons        
        group by Name,Value) T

group by Name
  having count(1)>1
)  

SQL Fiddle演示

关于sql同名但值不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13067447/

相关文章:

sql - jOOQ - CTE 和 INSERT

php - 字段 'xxx' 没有默认值

c# - DBReader 有行但 Read() 返回 false

SQL:如何在 orderby 中将 null 和空条目排序到前面?

sql-server - 如何防止SQL Server存储过程死锁?

sql - SQL Server 如何为自增列指定特定值?

sql - 改变 NULL 在排序中的位置

sql - 将问题数据存储到数据库中的最佳方法是什么?

php - 如何 JOIN 表以获得表 A 的全部内容和表 B 的大部分内容

sql-server - 什么时候每个多个数据库连接有一个事务才有意义?