Tengo una tabla SQL, con dos columnas [foto,persona]. Voy a través de cada foto, digamos foto uno contiene Ben y Harry, así que inserto dos filas.

Mi mesa ahora se ve así.

Photo, Person

1, Ben

1, Harry

Quiero ser capaz de seleccionar todas las fotos que contienen Ben y Harry en la misma imagen (Pero no se limita sólo a Ben y Harry, si otros están en la imagen, está bien). Intenté buscar instrucciones de ejemplo, pero no puedo obtener el texto de la consulta que quiero. ¿Cómo hago esto?

0
fent00 3 nov. 2019 a las 21:14

2 respuestas

La mejor respuesta

Agrupe por foto y establezca la condición en la cláusula HAVING:

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

O:

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

¿Así?

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

where person in ("Ben", "Harry") - obtiene todas las filas donde la persona es Ben o Harry

DISTINCT - elimina fotos duplicadas de los resultados

Actualizar:

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")

Aquí estoy seleccionando todas las filas con Ben y usando una subconsulta para limitar los resultados a filas con Harry también.

0
Eriks Klotins 3 nov. 2019 a las 18:36