+------------------------+
|Key| value | name |
+---+-------+------------+
1 A john
2 B Mary
3 C Ben
4 A Ben
5 B john
6 C Mary
我怎样才能选择哪个返回值为“A”和“B”的人(在这种情况下,只有“john”)
我现在有这个丑陋的sql ..
SELECT * FROM table where value="A" or value="B" group by name having count(name) >1 ;
有人可以告诉我更优雅的方式吗?
答案 0 :(得分:2)
这个怎么样:
select distinct t1.name from tab t1, tab t2
where t1.name = t2.name and
t1.value='A' and t2.value='B';
答案 1 :(得分:1)
你的答案根本不是那么混乱。但是,您无法为键选择有意义的值,并且知道您在键中要查找的值。所以它可以更整洁地写成
SELECT name
FROM table
WHERE key IN ('A', 'B')
GROUP BY name
HAVING COUNT(*) = 2
可以轻松扩展到任意数量的值甚至是y键的x。