У меня есть таблица вроде этого:
+------------------------+
|Key| value | name |
+---+-------+------------+
1 A john
2 B Mary
3 C Ben
4 A Ben
5 B john
6 C Mary
как я могу сделать select, который возвращает who, у которого есть значения "A" и "B" (в данном случае только "john" )
У меня есть этот уродливый один sql сейчас.
SELECT * FROM table where value="A" or value="B" group by name having count(name) >1 ;
может кто-нибудь сказать мне более элегантный способ?
Как насчет этого:
select distinct t1.name from tab t1, tab t2
where t1.name = t2.name and
t1.value='A' and t2.value='B';
Ваш ответ не совсем беспорядочен. Вы не можете выбрать значащее значение для ключа, и знаете, какие значения вы ищете в ключе. Таким образом, это может быть немного более аккуратно написано как
SELECT name
FROM table
WHERE key IN ('A', 'B')
GROUP BY name
HAVING COUNT(*) = 2
который может легко масштабироваться до любого числа значений или даже х из y-ключей.