Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta SQL pelo menos um de algo


Para encontrar todos os usuários com pelo menos uma postagem com classificação acima de 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 não se importa com a instrução SELECT dentro dele - você pode substituir NULL por 1/0, o que deve resultar em um erro matemático para dividir por zero... a cláusula WHERE.

A correlação (o WHERE p.user_id =u.id) é o motivo pelo qual isso é chamado de subconsulta correlacionada e retornará apenas as linhas da tabela USERS onde os valores de id corresponderem, além da comparação de classificação.

EXISTS também é mais rápido, dependendo da situação, porque retorna true assim que os critérios são atendidos - duplicatas não importam.