我有一个表的设置是这样的副本:SQL匹配多个行
id | key | val
1 | a | 1
1 | b | 2
2 | a | 3
2 | b | 4
其中每个ID都可以与它相关的许多键/值对。我试图编写一个查询,查找其中2个id具有重复的一组键/值对,我可以在其中指定要查找的键。例如,在下面的表格:
id | key | val
1 | a | 1 <
1 | b | 2 <
1 | c | 9
2 | a | 3
2 | b | 4
3 | a | 1 <
3 | b | 2 <
3 | c | 5
查询将返回,如果我指定的A和B键太寻找上述谱写行。到目前为止,我有以下查询:
select *
from MY_TABLE inner join
(select id
from MY_TABLE
where key = 'a'
group by val
having count(val) > 1) T1 on T1.val = MY_TABLE.val and MY_TABLE.key = 'a'
,如果我只想找基础上的一个键重复,但不是倍数伟大的工程。有没有人有关于如何修改上述查询的建议,以便我可以指定2个键而不是1个?
编辑:事情我已经试过
下面的查询接近(从最大索林的答案):
select a.*
from MY_TABLE a inner join
(select key,val
from MY_TABLE
where key in ('a','b')
group by key,val
having count(val) > 1) b on b.val = a.val and b.key = a.key
但只给我复制的,无论ID。更具体地讲,我展示如下区别:
With below table I want this But this query gives me this
id | key | val id | key | val id | key | val
1 | a | 1 1 | a | 1 1 | a | 1
1 | b | 2 1 | b | 2 1 | b | 2
1 | c | 9 3 | a | 1 3 | a | 1
2 | a | 3 3 | b | 2 3 | b | 2
2 | b | 4 4 | b | 2
3 | a | 1 5 | a | 1
3 | b | 2 6 | b | 2
3 | c | 5
4 | b | 2
5 | a | 1
6 | b | 2
双编辑:
我一直在问一个更具体的例子,所以在这儿呢。假设我想要查找所有对象名称与年龄都相同的对象。如果我有如下表:
id | key | value
1 | Name | 'John' <-- These rows
1 | Age | '25' <--
1 | Job | 'Farmer'
2 | Name | 'Steve'
2 | Age | '30'
3 | Name | 'John' <-- and these rows would be returned
3 | Age | '25' <--
3 | Job | 'Plumber'
4 | Name | 'John' <-- But not either of these rows, because Age is different.
4 | Age | '26' <--
您正在使用哪些DBMS? –
你使用NOSQL吗?你的主要在哪里?主表是全表吗? – inetphantom
@a_horse_with_no_name我正在根据MSSQL数据库构建/测试这些查询,但它也需要在MySQL和Oracle上运行。如果没有独立于数据库管理系统的解决方案,我可以使用单独的查询。 – chawdam