sql >> Database >  >> RDS >> Mysql

mysql-query om alles te selecteren behalve

NIET IN gebruiken:

SELECT w.*
  FROM WIDGET w
 WHERE w.widget_id NOT IN (SELECT c.widget
                             FROM CHOSEN c
                            WHERE c.user_id = $user_id)

NO EXISTS gebruiken:

SELECT w.*
  FROM WIDGET w
 WHERE NOT EXISTS (SELECT NULL
                     FROM CHOSEN c
                    WHERE c.widget_id = w.widget_id 
                      AND c.user_id = $user_id)

LEFT JOIN/IS NULL:

   SELECT w.*
     FROM WIDGET w
LEFT JOIN CHOSEN c ON c.widget_id = w.widget
                  AND c.user_id = $user_id
    WHERE w.widget IS NULL

Prestaties:

Als de kolommen vergeleken (widget_id in beide tabellen) zijn niet nullable, LEFT JOIN/IS NULL presteert het beste op MySQL . Als de kolommen zijn nullable (de waarde kan NULL zijn), NOT IN of NOT EXISTS presteren beter .



  1. Waarom houdt PostgreSQL niet van HOOFDLETTERS tabelnamen?

  2. MYSQL invoegen waar niet bestaat met PDO

  3. Wat is er mis met deze MySQL-instructie:DECLARE @ID INT

  4. Vergrendeling en gelijktijdigheid met MySQL