2010-01-11 47 views
0

我有這樣一個表如何選擇數據:取決於multple行的場

+------------------------+ 
|Key| value | name  | 
+---+-------+------------+  
    1  A  john  
    2  B  Mary  
    3  C  Ben  
    4  A  Ben  
    5  B  john  
    6  C  Mary 

我怎麼做一個選擇,它返回誰擁有「A」和「B」的值(在這種情況下,只有「約翰」)

我有這樣一個醜陋現在SQL ..

SELECT * FROM table where value="A" or value="B" group by name having count(name) >1 ; 

誰能告訴我一個更優雅的方式?

回答

2

如何:

select distinct t1.name from tab t1, tab t2 
where t1.name = t2.name and 
t1.value='A' and t2.value='B'; 
1

你的回答是不是凌亂的。你不能爲鍵選擇一個有意義的值,並且知道你在鍵中尋找什麼值。所以它可以寫得更整齊

 

SELECT name 
FROM table 
WHERE key IN ('A', 'B') 
GROUP BY name 
HAVING COUNT(*) = 2 
 

它可以輕鬆地縮放到任何數量的值或甚至y鍵的x。