MySQL, как получить группу, которая соответствует значению другой группы в том же столбце? - PullRequest
0 голосов
/ 03 ноября 2018
Here are the tables:  

  Drinker (name, address)  
  Bar (name, address)  
  Beer (name, brewer)  
  Frequents (drinker, bar, times_a_week)  
  Likes (drinker, beer)  
  Serves (bar, beer, price) 

И вопрос звучит так:
Найдите тех пьющих, которые наслаждаются тем же набором пива, что и Сильви Хьюм.

У меня есть следующий код:

SELECT *  
FROM drinker d  
JOIN likes l1 ON d.Name = l1.Drinker  
WHERE l1.Beer IN (SELECT Beer FROM likes l2 WHERE l2.Drinker = 'Silvie Hume');  

Похоже, мои результаты возвращают все напитки, которые соответствуют одному из сортов пива, которые нравятся Сильви Хьюм, я понятия не имею, как выбрать пьющего, которому нравится тот же набор пива, что и Сильви Хьюм. Любая помощь? Спасибо!
Я попытался заменить IN на = ALL, но это также не сработало

1 Ответ

0 голосов
/ 03 ноября 2018

Один из вариантов использует самостоятельное соединение на таблице Likes:

SELECT
    t1.drinker
FROM Likes t1
LEFT JOIN Likes t2
    ON t1.beer = t2.beer AND t2.drinker = 'Silvie Hume'
WHERE
    t1.drinker <> 'Silver Hume'
GROUP BY
    t1.drinker
HAVING
    COUNT(*) = COUNT(t2.beer) AND
    COUNT(*) = (SELECT COUNT(*) FROM Likes WHERE drinker = 'Silvie Hume');

Для объяснения, первое условие в предложении HAVING утверждает, что все лайки данного пьющего соответствуют тем, что нравятся Сильви Хьюму. Второе условие охватывает крайний случай, когда все лайки данного пьющего совпадают, но у Сильви Хьюма были и другие лайки. Поэтому мы утверждаем, что количество лайков для каждого пьющего такое же, как у Сильви Хьюм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...