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

Защо INNER JOIN не е равно (!=) да виси завинаги

Да кажем първото ви INNER JOIN връща 75% от 1 000 000 реда в table1 . Втората заявка не връща 250 000 други реда, както си мислите. Вместо това се опитва да създаде декартов продукт и да премахне 750 000 съвпадащи реда. По този начин се опитва да върне 6 000 000 × 1 000 000-750 000 реда. Това е изпъкнал набор от редове 6×10.

Вероятно искате това:

SELECT * FROM table1
LEFT JOIN table2 ON table2.number = table1.number
WHERE table2.number IS NULL

Това връща редове в table1 не присъства в table2 .

Може също да се интересувате от FULL OUTER JOIN :

SELECT * FROM table1
FULL OUTER JOIN table2 ON table2.number = table1.number
WHERE table1.number IS NULL AND table2.number IS NULL

Това връща редове в двете таблици, които нямат съвпадение в другата таблица.



  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 и PHP

  2. Трябва ли да използвам един голям оператор SQL Select или няколко малки?

  3. Как да съхраня BIGINT в MySQL с помощта на PDO?

  4. Проверете дали текущата дата е между две дати + заявка за избор на mysql

  5. Внедряване и проектиране на архитектура за система за уведомяване с помощта на socket.io node.js и входящи съобщения