sql >> Database >  >> RDS >> Mysql

Haal records op uit de ene tabel waar er geen record in een andere is

NIET IN gebruiken:

SELECT s.*
  FROM SURVEYS s
 WHERE s.userid != 28
   AND s.surveyid NOT IN (SELECT r.survey_id
                            FROM RESPONSES r
                           WHERE r.userid = 28)

LEFT JOIN/IS NULL gebruiken:

   SELECT s.*
     FROM SURVEYS s
LEFT JOIN RESPONSES r ON r.survey_id = s.surveyid
                     AND r.user_id = 28
    WHERE s.userid != 28
      AND r.userid IS NULL

NO EXISTS gebruiken:

SELECT s.*
  FROM SURVEYS s
 WHERE s.userid != 28
   AND NOT EXISTS (SELECT NULL
                     FROM RESPONSES r
                    WHERE r.userid = 28
                      AND r.survey_id = s.surveyid)

Van de vermelde opties is de NOT IN en LEFT JOIN/IS NULL zijn gelijkwaardig hoewel ik de voorkeur geef aan de NOT IN omdat het beter leesbaar is.



  1. Meerdere indexen versus indexen met meerdere kolommen

  2. MySQL PHP - SELECTEER WAAR id =array()?

  3. Is het mogelijk om door de gebruiker gedefinieerde aggregaten (clr) te gebruiken met vensterfuncties (over)?

  4. PHP/MySQL - De beste manier om een ​​unieke willekeurige string te maken?