Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Abrufen von Datensätzen aus einer Tabelle, wo in einer anderen kein Datensatz vorhanden ist

Verwendung von NOT IN:

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)

Verwendung von LEFT JOIN/IS NULL:

   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

Verwendung von NOT EXISTS:

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)

Von den aufgelisteten Optionen ist NOT IN und LEFT JOIN/IS NULL sind äquivalent, obwohl ich NOT IN bevorzuge weil es besser lesbar ist.