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

mysql-forespørgsel for at vælge alt undtagen

Ved brug af NOT IN:

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

Ved brug af NOT EXISTS:

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/ER 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

Ydeevne:

Hvis kolonner sammenlignet (widget_id i begge tabeller) er ikke nullable, LEFT JOIN/IS NULL klarer sig bedst på MySQL . Hvis kolonner er nullable (værdien kunne være NULL), NOT IN eller NOT EXISTS yder bedre .



  1. Sådan bruges en ringdatastruktur i vinduesfunktioner

  2. Hvordan kalder man Oracle-funktion eller lagret procedure ved hjælp af fjederpersistensramme?

  3. Indsættelse af et Python datetime.datetime-objekt i MySQL

  4. Valg af unikke rækker i et sæt af to muligheder