Mysql
 sql >> Baza danych >  >> RDS >> Mysql

zapytanie mysql, aby wybrać wszystko oprócz

Używanie 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)

Korzystanie NIE ISTNIEJE:

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)

LEWE JOIN/JEST 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

Wydajność:

Jeśli porównywane kolumny (widget_id w obu tabelach) nie mają wartości null, LEFT JOIN/IS NULL działa najlepiej na MySQL . Jeśli kolumny dopuszczają wartość NULL (wartość może być NULL), osiągają lepsze wyniki:NOT IN lub NOT EXISTS .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę dokonać porównania ciągów znaków SQL z uwzględnieniem wielkości liter w MySQL?

  2. JSON_TYPE() – Uzyskaj typ wartości JSON w MySQL

  3. Migracja z Oracle do MySQL

  4. PHPMyAdmin wymusza użycie ut8mb4 jako domyślnego sortowania

  5. Gdzie używać mysql_real_escape_string, aby zapobiec wstrzykiwaniu SQL?