|
|
|
| Здравствуйте. Имеется поле id (unsigned int) таблицы table, где хранится некий набор чисел.
Необходимо написать запрос, который определит все пропущенные значения (или диапазоны значений) для этого поля.
Я нашел такой ответ, и проверил вроде работает.
Делаете вспомогательную таблицу (vs), заполненную числами от 1 до ... И объединяете с основной
select vs.id from vs left join `table` t using(id) where t.id is null;
Я не понимаю вот это место - t using(id) where t.id is null; По логике сдесь выбирается номера которые не вошли в Table. Что такое - t, что делает using(id), и что означает - t.id is null? | |
|
|
|
|
|
|
|
для: zagazz
(31.08.2011 в 06:56)
| | `table` t (аналогично `table` as t ) - это алиас имени таблицы `table` просто как бы второе имя таблицы (чаще всего сокращенное имя которое могло бы быть m, z, vasya, noga и тд) принятое в рамках одного запроса, что бы не пришлось писать table.id потому как программисты народ ленивый и написать 4 лишние символа сильно ломает))
where t.id is null - это условие выборки поля id таблицы t (`table`) при котором значение данного поля не существует
using(id) - это тоже что on vs.id = t.id но так как имена полей в обоих таблицах совпадают, то можно (а по мне так и нужно) писать using(id)
и наконец главный вопрос, который сильно настораживает, зачем понадобилось искать пропущенные id? | |
|
|
|
|
|
|
|
для: Valick
(31.08.2011 в 08:57)
| | Спасибо! Так вроде всё понятно, но когда встречаешь незнакомые сокращения то быть уверенным трудно. Это тестовое задание. | |
|
|
|