Как выбрать значение столбца, только если все другие записи с таким же значением существуют и совпадают? (MYSQL)

0

Название немного грязно, но вот пример, предположим, что у нас есть таблица:

| name   | room |  
=================
| John   | 4    |  
| John   | 6    |    
| John   | 9    |  
| Smith  | 4    |  
| Smith  | 6    |  
| Brian  | 4    |  
| Brian  | 6    |  
| Brian  | 9    | 

Я хочу выбрать Джона и Брайана, потому что у них обоих есть комнаты 4, 6 и 9, но не Смит, так как у него нет комнаты 9. (Если бы у нас был другой человек, у которого ТОЛЬКО есть комната 4 и 6, d выберите этого другого человека, а также Смита).

Я знаю, что мне нужно сделать какой-то коррелированный запрос, но я не уверен, как на самом деле заставить его делать что-то вроде

for a check for b
Теги:

1 ответ

3
Лучший ответ

Если вам нужны группы имен, которые разделяют одни и те же комнаты, я бы рекомендовал group_concat():

select rooms, group_concat(name) as names
from (select name, group_concat(room order by room) as rooms
      from t
      group by name
     ) n
group by rooms;

Если вам нужны только комбинации с более чем одним именем, добавьте having count(*) > 1 во внешний select.

  • 0
    Можно ли будет возвращать имена как отдельные значения в строке? Я предполагаю, что мне просто нужно удалить один из group_concats?
  • 0
    Ага! удаление одного из групповых результатов принесло мне желаемые результаты. Спасибо!
Показать ещё 1 комментарий

Ещё вопросы

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