什么是用于检查表中相同列值的sql查询?

时间:2014-06-12 08:19:59

标签: mysql sql database

我有一个表emp(id,name,salary)并且没有主键(我知道这是一个坏主意,但我的工作是在不一致的表上)
我想要一个查询来检索具有相同值对(元组,名称)的元组 我尝试使用自联接但没有得到确切的声明。 这对同一对正在考虑,但我正在为超过2个属性进行比较。请帮助 示例

     id     name   salary
     1      a       100
     1      b       100
     2      a       200

     1      a       300
     2      c       200

所以我想找到具有相同id和name值的元组。这是(1,a)

4 个答案:

答案 0 :(得分:4)

您可以通过分组找到它们,只选择那些计数大于1的记录:

SELECT ID, Name
FROM Table
GROUP BY ID, Name
HAVING COUNT(*) > 1

答案 1 :(得分:1)

我可能会使用exists子句,它很快。

如果您需要对列进行更多比较,只需添加更多AND。

   select * from  table_name a
   where exists ( select 1 from table_name b where a.salary != b.salary 
   and a.id = b.id
   and a.name = b.name)

但如果记录完全相同,则不会给出结果,在这种情况下,如果两个记录也具有相同的薪水。

在Oracle中,我将使用rowid标识符,但这并不存在于我的

答案 2 :(得分:0)

您可以使用计数,分组和拥有。

select
  id,
  name,
  count(*)
from
  mytable
group by
  id,name
having
  count(*)>1

答案 3 :(得分:0)

建议: 如果您没有将主键应用于表(由于您的要求),则至少设置索引(id,name),以便生成更快的结果。

查询以获取不同的(id,name)对: SELECT distinct id,name FROM emp;

如果要求还要获取总工资额: SELECT id,name,sum(salary)作为工资FROM emp group by id,name;

希望它有所帮助。