У меня есть таблица tbl_registers
, которая содержит первичный ключ id
и внешний ключ collection_id
; У меня также есть другая таблица tbl_cross
, которая содержит внешний ключ register_id
, связанный с tbl_registers
, и другое поле number
(обратите внимание, что это простое числовое значение).
Я хочу знать, что каждое пропущенное число из любого регистра принадлежит определенной коллекции.
Я начал читать этот пост: MySQL получает пропущенные идентификаторы из таблицы
Работает отлично. Это запрос:
SELECT 1 as gap_starts_at,
(SELECT MIN(t4.id) -1 FROM testtable t4 WHERE t4.id > 1) as gap_ends_at
FROM testtable t5
WHERE NOT EXISTS (SELECT t6.id FROM testtable t6 WHERE t6.id = 1)
HAVING gap_ends_at IS NOT NULL limit 1
UNION
SELECT (t1.id + 1) as gap_starts_at,
(SELECT MIN(t3.id) -1 FROM testtable t3 WHERE t3.id > t1.id) as gap_ends_at
FROM testtable t1
WHERE NOT EXISTS (SELECT t2.id FROM testtable t2 WHERE t2.id = t1.id + 1)
HAVING gap_ends_at IS NOT NULL;
В моем сценарии testtable
- это запрос: просто замените testtable
на
(
SELECT number
FROM tbl_cross AS cr
WHERE cr.register_id = 235
ORDER BY cr.number ASC
)
и замена .id
на .number
У меня есть результаты. Например:
gap_starts_at | gap_ends_at
20 | 22
48 | 48
59 | 63
То, что я хотел бы, это расширение этого запроса, чтобы получить каждое пропущенное значение (или каждый пробел) для каждого регистра.
* 1 028 * Пример:
register_id | gap_starts_at | gap_ends_at
235 | 20 | 22
235 | 48 | 48
235 | 59 | 63
743 | 11 | 13
743 | 25 | 25
Важное примечание. Моя цель - пропустить номера. Таким образом, наличие полного списка пропущенных значений, а не списка пропусков, в принципе, для меня то же самое. Я не знаю, какой путь лучше.
register_id | missing_value
235 | 20
235 | 21
235 | 22
235 | 48
743 | 11
743 | 12
743 | 13
Вы можете мне помочь? Спасибо.