У меня есть три стола:
player [id, name]
attribute [id, name]
player_attribute [id, player_id, attribute_id, value]
каждый игрок может иметь разные атрибуты, некоторые из них не имеют никаких.Теперь мне нужно искать игроков с определенными атрибутами, например, всех игроков с номером 11, и их имя - Джон.На данный момент я также знаю идентификаторы этих атрибутов, where
часть моего запроса может выглядеть следующим образом: WHERE (attribute.id, attribute.value) in ((5, '11'), (18, 'John'))
Я должен получить всех игроков, которые соответствуют всем запрашиваемым атрибутам.
проблема в том, что я не знаю, как должен выглядеть весь запрос?Я пробовал объединения, вложенные выборки, группирование, но я не могу заставить его работать.Я всегда получаю слишком много или недостаточно строк.
Можете ли вы мне помочь, пожалуйста?
РЕДАКТИРОВАТЬ Благодаря aranid я нашел решение:
select player_id from (
select * from player_attribute where (attribute.id, attribute.value) in ((5, '11'), (18, 'John')))
group by player_id
having count(*) = 2
итак, ключевое слово было having by
использовано правильно:)
Есть ли способ преобразовать вышеуказанный запрос в оператор JOIN
?