Проблемы с HAVING-запросом
Я следую онлайн-курс по базам данных. Однако я не знаю, как поступить с этим вопросом. Кто-нибудь может помочь? Это мой код:
SELECT distinct name
FROM Persons P, Knows K
WHERE K.personA_id = P.id AND K.personB_id = P.id
GROUP BY name
HAVING SUM(K.id) = 2
3 ответа
Решение
SELECT distinct p.name
FROM Knows K
LEFT JOIN Persons P,
ON K.personA_id = P.id
WHERE K.personB_id
IN (
SELECT id
FROM Persons
WHERE age>60
)
GROUP BY name
HAVING COUNT(K.personB_id) = 2
SELECT P.name
FROM Persons P
WHERE ( SELECT COUNT(*)
FROM Knows K JOIN Persons P2 ON K.personB_id = P2.id
WHERE K.personA_id = P.id
AND P2.age >= 60
) = 2
но если вы хотите знать, как использовать
SELECT P.name
FROM Persons P JOIN Knows K ON K.personA_id = P.id
JOIN Persons P2 ON P2.id = K.personB_id
WHERE P2.age >= 60
GROUP BY P.id
HAVING COUNT(*)=2
Обратите внимание, этот запрос будет работать ТОЛЬКО с MySql
Человек А и Человек В всегда будут разными в таблице Ноу, верно? Если это так, то вы не должны присоединяться к обоим условиям.
Я предлагаю вам удалить "AND K.personB_id = P.id"