|
|
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
Добрый день. Подскажите как сделать следующее: Есть таблица t1: ID пользователя: ... 6040 6042 6045 ... и т.д. Другие столбцы в таблице (еще 7 штук) с данными пользователей. Как найти пользователей (по ID), которые пропущены (т.е. с 6041, 6043, 6044 в примере выше). Попробовал создать новую таблицу (t1_copy) с значениями заполненными по порядку: ... 6040 6041 6042 6044 6044 6045 ... и т.д. После этого к созданной таблице присоединить таблицу выше вот так: SELECT t1_copy.ID, t1.ID FROM t1_copy LEFT JOIN t1 ON t1_copy.ID = t1.ID where ID is null; Запустил на выполнение и ждал целый день (где-то часов 12), но так и не смог дождаться выполнения. В таблице около 1.3 мл строк. Можете подсказать какие еще есть варианты как найти пропущенных пользователей? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 16:45 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
FROM T TT LEFT JOIN T TTT ON TT.ID = TTT.ID-1 WHERE TTT.ID IS NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 17:43 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
SELECT t1_copy.ID, t1.ID FROM t1_copy LEFT JOIN t1 ON t1_copy.ID = t1.ID where t1.ID is null; Индексы по полю ID есть в обеих таблицах? Если всё-равно будет долго, то попробуйте по частям (LIMIT 0, 1000). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2016, 23:42 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
Громыхатель, если по полю ID нет индекса, то с вероятностью 99% это диагноз. ЗЫ. в каких ещё "обеих таблицах"?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2016, 04:31 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
tanglirЗЫ. в каких ещё "обеих таблицах"??а, ну да как-то привык, что таблицы с последовательностями создаются на лету :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2016, 04:33 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
AkinaFROM T TT LEFT JOIN T TTT ON TT.ID = TTT.ID-1 WHERE TTT.ID IS NULL Подскажите что значит "FROM T TT". Т.е получается берем из двух таблиц "Т" и "ТТ" и присоединяем в к третей "ТТТ" правильно? Либо "ТТТ" это опечатка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2016, 11:40 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
Craftsman1, ТТ и ТТТ - псевдонимы таблицы Т. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2016, 11:41 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
AkinaFROM T TT LEFT JOIN T TTT ON TT.ID = TTT.ID-1 WHERE TTT.ID IS NULL Так че-то не работает. You have an error in your SQL syntax. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2016, 12:56 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
Craftsman1, Покажите полностью выполняемый запрос и полностью сообщение об ошибке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2016, 12:58 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
miksoftCraftsman1, Покажите полностью выполняемый запрос и полностью сообщение об ошибке. Я прямо так и выполняю: AkinaFROM T TT LEFT JOIN T TTT ON TT.ID = TTT.ID-1 WHERE TTT.ID IS NULL Поменял только название таблицы на "T" Получается это: [SQL]FROM T TT LEFT JOIN T TTT ON TT.ID = TTT.ID-1 WHERE TTT.ID IS NULL [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM T TT LEFT JOIN T TTT ON TT.ID = TTT.ID-1 WHERE TTT.ID IS NULL' at line 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2016, 13:02 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
Craftsman1Я прямо так и выполняю:Ну это же заготовка, а не готовый запрос! Еще секцию SELECT нужно в начале написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2016, 13:53 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
miksoftCraftsman1Я прямо так и выполняю:Ну это же заготовка, а не готовый запрос! Еще секцию SELECT нужно в начале написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2016, 23:47 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
miksoftCraftsman1Я прямо так и выполняю:Ну это же заготовка, а не готовый запрос! Еще секцию SELECT нужно в начале написать. При таком запросе: SELECT t1_copy.ID, t1.ID_idealprice FROM t1_copy LEFT JOIN t1 ON t1_copy.ID = t1.ID_idealprice должен выводить в левую таблицу все строки из таблицы t1_copy, а в правую только значения из таблицы t1. В итоге должно получится по идее: 6040 6040 6041 NULL 6042 6042 6044 NULL 6044 NULL 6045 6045 А получается что он строки где должно быть NULL просто пропускает и получается: 6040 6040 6042 6042 6045 6045 Можете подсказать в чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2016, 23:55 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
Везде написано: LEFT JOIN Возвращаются все данные из «левой» таблицы, даже если не найдено соответствий в «правой» таблице («левая» таблица в SQL-запросе стоит левее знака равно, «правая» — правее). У меня почему-то не возвращает из левой таблицы все данные, а только те в которых были найдены соответствия. Может в MySQL 5.7 что-то поменялось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2016, 00:57 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
Craftsman1, А если добавить Order BY t1_copy.ID ? Или WHERE t1_copy.ID = 6041 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2016, 01:33 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2016, 08:31 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
ГромыхательCraftsman1, А если добавить Order BY t1_copy.ID ? Или WHERE t1_copy.ID = 6041 ? Если добавляю все эти "уточнения", то запрос выполняется нереально долго. Даже если добавить ограничение LIMIT 0, 5 то все равно не помогает. Я так предполагаю он начинает просматривать (индексировать) все строки в столбце, в котором 1.5 мл строк. Еще не разу не смог дождаться окончания выполнения такого запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2016, 14:53 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
Можете кто-нибудь помочь написать запрос. Таблицы скачать можно тут . Нужно в таблице t1 в столбце ID_moi найти пропущенные значения. Для этого создал таблицу t1_copy в которой есть столбец ID_moi со всеми значениями по порядку. В таблице 1.5 мл строк и в будущем будет еще больше. Можно ли написать запрос так чтобы выполнялся не больше 1-2 часов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2016, 15:36 |
|
||
|
Как в таблице найти пропущенные строки
|
|||
|---|---|---|---|
|
#18+
[quot Craftsman1]ГромыхательЕсли добавляю все эти "уточнения", то запрос выполняется нереально долго. Даже если добавить ограничение LIMIT 0, 5 то все равно не помогает. Я так предполагаю он начинает просматривать (индексировать) все строки в столбце, в котором 1.5 мл строк. Вас же спрашивали о наличии индексов... Покажите EXPLAIN такого долгого запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2016, 20:58 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=102&tid=1831809]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 309ms |

| 0 / 0 |
