J'ai une table SQL, avec deux colonnes [photo, personne]. Je passe en revue chaque photo, disons que la photo contient Ben et Harry, alors j'insère deux rangées.

Ma table ressemble maintenant à ceci.

Photo, Person

1, Ben

1, Harry

Je veux pouvoir sélectionner toutes les photos qui contiennent Ben et Harry dans la même image (mais pas uniquement Ben et Harry, si d'autres sont sur la photo, ça va). J'ai essayé de rechercher des exemples d'instructions, mais je n'arrive pas à obtenir le libellé de la requête que je souhaite. Comment puis-je faire cela?

0
fent00 3 nov. 2019 à 21:14

2 réponses

Meilleure réponse

Regroupez par photo et définissez la condition dans la clause HAVING:

select photo
from tablename
group by photo
having sum(person in ('Ben', 'Harry')) = 2

ou:

select photo
from tablename
where person in ('Ben', 'Harry') 
group by photo
having count(*) = 2
0
forpas 3 nov. 2019 à 18:33

Comme ça?

 Select distinct photo from your_table where person in ("Ben", "Harry")

where person in ("Ben", "Harry") - obtient toutes les lignes où la personne est Ben ou Harry

DISTINCT - supprime les photos en double des résultats

MISE À JOUR:

SELECT A.photo FROM your_table A WHERE A.person = "Ben" AND exists (SELECT 1 FROM your_table B where A.photo = B.photo AND A.person = "Harry")

Ici, je sélectionne toutes les lignes avec Ben et j'utilise une sous-requête pour limiter les résultats aux lignes avec Harry également.

0
Eriks Klotins 3 nov. 2019 à 18:36