Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL - Изберете всички, освен това, което е в тази таблица

Използване на LEFT JOIN/IS NULL

   SELECT DISTINCT
          i.data
     FROM IMAGE i
     JOIN USER_IMAGE ui ON ui.image_id = i.id
LEFT JOIN USER u ON u.id = ui.user_id
                AND u.user = ?
    WHERE u.id IS NULL

Използване на NOT IN

SELECT DISTINCT
       i.data
  FROM IMAGE i
  JOIN USER_IMAGE ui ON ui.image_id = i.id
 WHERE ui.user_id NOT IN (SELECT u.id
                            FROM USER u
                           WHERE u.user = ?)

Използване на NOT EXISTS

SELECT DISTINCT
       i.data
  FROM IMAGE i
  JOIN USER_IMAGE ui ON ui.image_id = i.id
 WHERE NOT EXISTS(SELECT NULL
                    FROM USER u
                   WHERE u.id = ui.user_id
                     AND u.user = ?)

Ефективност:

LEFT JOIN/IS NULL и NOT IN осигуряват еквивалентна производителност - NOT EXISTS е с ~30% по-малко ефективен. Вижте това за повече подробности .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да избирате от две таблици в MySQL, дори ако не всички редове в едната таблица имат кореспонденти в другата?

  2. SQL с фиксирана стойност IN() спрямо производителност на INNER JOIN

  3. SQL-алхимия:ValueError твърде много стойности за разопаковане?

  4. MySQL - Как да огранича един резултат на ID?

  5. Фатална грешка:Извикване на недефинирана функция mysqli_result()