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

MySQL:Намиране на редове, които не участват във връзка

Ето един типичен начин да направите тази заявка, без да използвате метода на подзаявката, който показахте. Това може да удовлетвори искането на @Godeke да види решение, базирано на присъединяване.

SELECT * 
FROM movies m
 LEFT OUTER JOIN seen s
 ON (m.id = s.movie_id AND s.user_id = 123)
WHERE s.movie_id IS NULL;

Въпреки това, в повечето марки бази данни това решение може да работи по-лошо от решението за подзаявка. Най-добре е да използвате EXPLAIN, за да анализирате и двете заявки, за да видите коя от тях ще се справи по-добре предвид вашата схема и данни.

Ето още един вариант на решението на подзаявката:

SELECT * 
FROM movies m
WHERE NOT EXISTS (SELECT * FROM seen s 
                  WHERE s.movie_id = m.id 
                    AND s.user_id=123);

Това е корелирана подзаявка, която трябва да бъде оценена за всеки ред от външната заявка. Обикновено това е скъпо, а оригиналната ви примерна заявка е по-добра. От друга страна, в MySQL „NOT EXISTS " често е по-добро от "column NOT IN (...) "

Отново трябва да тествате всяко решение и да сравните резултатите, за да сте сигурни. Загуба на време е да избирате каквото и да е решение, без да измервате ефективността.



  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. Изберете редове от таблица, където ред в друга таблица със същия идентификатор има определена стойност в друга колона

  3. Как да филтрирам (или заменя) unicode символи, които биха заели повече от 3 байта в UTF-8?

  4. Как работи функцията LPAD() в MySQL

  5. качете изображение в mysql база данни php