我有三张桌子:
player [id, name]
attribute [id, name]
player_attribute [id, player_id, attribute_id, value]
每个玩家可以有不同的属性,其中一些没有。现在我需要搜索具有特定属性的球员,例如所有号码为 11 且名字为 John 的球员。此时我也知道这些属性的 id,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
语句?