我有一個表的設置是這樣的副本: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