Mysql
 sql >> Database >  >> RDS >> Mysql

Query SQL almeno uno di qualcosa

Per trovare tutti gli utenti con almeno un post con una valutazione superiore a 10, utilizza:

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

EXISTS non si preoccupa dell'istruzione SELECT al suo interno:potresti sostituire NULL con 1/0, il che dovrebbe comportare un errore matematico per la divisione per zero ... Ma non lo farà, perché EXISTS si occupa solo del filtraggio in la clausola WHERE.

La correlazione (WHERE p.user_id =u.id) è il motivo per cui viene chiamata subquery correlata e restituirà solo righe dalla tabella USERS in cui i valori id corrispondono, oltre al confronto delle valutazioni.

EXISTS è anche più veloce, a seconda della situazione, perché restituisce true non appena i criteri vengono soddisfatti:i duplicati non contano.