我有一个表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)
答案 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;
希望它有所帮助。