как выбрать данные в зависимости от поля нескольких строк

0

У меня есть таблица вроде этого:

+------------------------+
|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

2 ответа

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-ключей.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню