sql >> Base de Datos >  >> RDS >> Mysql

consulta SQL al menos uno de algo

Para encontrar todos los usuarios con al menos una publicación con una calificación superior a 10, use:

SELECT u.*
  FROM USERS u
 WHERE EXISTS(SELECT NULL
                FROM POSTS p
               WHERE p.user_id = u.id
                 AND p.rating > 10)

EXISTS no se preocupa por la instrucción SELECT que contiene; podría reemplazar NULL con 1/0, lo que debería dar como resultado un error matemático al dividir por cero... Pero no lo hará, porque EXISTS solo se ocupa de la filtración en la cláusula WHERE.

La correlación (DONDE p.user_id =u.id) es la razón por la que se denomina subconsulta correlacionada y solo devolverá filas de la tabla USUARIOS donde coincidan los valores de identificación, además de la comparación de calificación.

EXISTS también es más rápido, según la situación, porque devuelve verdadero tan pronto como se cumplen los criterios; los duplicados no importan.