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

MySQL:открийте липсващите идентификатори на поръчки

Ето друго решение за това:

CREATE TABLE TEMP 
(n int);
INSERT INTO Temp VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9);

SET @maxid = (SELECT MAX(orders_id) FROM orders);

SELECT     s.id 
FROM
(
    SELECT id
    FROM
    (
       SELECT t4.n * 1000 + t3.n * 100 + t2.n * 10 + t1.n + 1 AS id
       FROM         TEMP AS t1
       CROSS JOIN TEMP AS t2
       CROSS JOIN TEMP AS t3
       CROSS JOIN TEMP AS t4
    ) t 
    WHERE id BETWEEN 1000 AND @maxid
) s 
LEFT JOIN orders t ON s.id = t.`orders_id` 
WHERE t.`orders_id` IS NULL;

Това трябва да ви даде orders_id s:

ID
1001
1002
1005
1006
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1021
1022
1023
1024

Демонстрация на SQL Fiddle

Имайте предвид, че: Създадох TEMP таблица със стойности от 0 до 9, за да използвате за генериране на опорна таблица, съдържаща стойности от 1 до 10 000, вместо цикъла while, който сте имали в заявката, която сте публикували. Можете да контролирате стойностите от тази таблица в зависимост от стойностите във вашата таблица. Ако сте имали стойности, които надвишават 10000 CROSS JOIN TEMP маса още веднъж.

Актуализация: Ако orders_id е от тип данни varchar просто го преобразувайте в INTEGER така:

SELECT     s.id 
FROM
(
    SELECT id
    FROM
    (
       SELECT t4.n * 1000 + t3.n * 100 + t2.n * 10 + t1.n + 1 AS id
       FROM         TEMP AS t1
       CROSS JOIN TEMP AS t2
       CROSS JOIN TEMP AS t3
       CROSS JOIN TEMP AS t4
  ) t WHERE id between 1000 AND @maxid
) s 
LEFT JOIN
(
    SELECT CONVERT(orders_id, UNSIGNED INTEGER) AS orders_id 
    FROM orders
) t ON s.id = t.`orders_id` 
WHERE t.`orders_id` IS NULL;

Актуализирана демонстрация на SQL Fiddle




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

  2. извличане на данни от mysql и показване във форма

  3. Как да копирате нови и актуализирани редове от офлайн в онлайн база данни?

  4. Коя версия на MySQL е съвместима с Airflow версия 1.10?

  5. Mysql сортиране на йерархични данни