J'ai trois tables:SQL comment sélectionner toutes les lignes liées à des conditions externes
player [id, name]
attribute [id, name]
player_attribute [id, player_id, attribute_id, value]
chaque joueur peut avoir des attributs différents, certains d'entre eux n'avez pas encore. Maintenant, je dois rechercher des joueurs avec certains attributs, par ex. tous les joueurs qui ont le numéro 11, et leur prénom est John. En ce moment, je sais aussi id de ces attributs, where
partie de ma requête peut ressembler à: WHERE (attribute.id, attribute.value) in ((5, '11'), (18, 'John'))
Je dois obtenir tous les joueurs qui répond à tous les attributs demandés.
Le problème est que je ne sais pas à quoi doit ressembler toute la requête? J'ai essayé les jointures, les sélections imbriquées, le regroupement mais je ne suis pas capable de le faire fonctionner. Je reçois toujours trop, ou pas assez de lignes.
Pouvez-vous m'aider s'il vous plaît?
EDIT Merci à aranid que j'ai trouvé une solution:
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
donc, le mot-clé a été having by
utilisé correctement :)
Est-il possible de transformer ci-dessus requête dans JOIN
déclaration?
Ce genre de question se reproduit raisonnablement souvent, vous pouvez trouver l'inspiration supplémentaire dans http://stackoverflow.com/questions/3102362/sql-how-do-i-make-a-selection-based-on-categories par exemple . – araqnid
merci araqnid! J'ai trouvé quelques indices, j'ai édité ma question pour inclure une réponse – uolot
J'ai ajouté la balise 'eav' mais j'ai dû cannibaliser la balise' select' que vous avez utilisée, car il y a une limite de cinq balises. Je pensais que 'select' était superflue après' sql' et 'query'. –