|
|
|
| есть набор данных числа от 0 до 100 000 000
нужно отобрать все записи которые соответствуют условию
<> 1 000 000
<> 1 000 001
<> 2 000 000
<> 3 000 000
......
<> 7 000 000
<> 8 000 000
то есть значение НЕ должно быть либо целым миллионом, 2-мя миллионами и так до 8 миллионов и НЕ равно 1 000 001
пока написал такое условие, в принципе устраивает
... where id > 8000000 or (id\1000000 <> id/1000000 and id <> 1000001)
но может есть другие идеи | |
|
| |
|
|
|
| Я пас. Круче некуда. Разве что Лукас выдаст нечто. | |
|
| |
|
5 Кб. |
|
| Мне показалось(?), при таком описании условия работает быстрее раза в 1,5-2:
WHERE
ID < 999999 OR
ID Between 1000002 AND 1999999 OR
ID Between 2000001 AND 2999999 OR
ID Between 3000001 AND 3999999 OR
ID Between 4000001 AND 4999999 OR
ID Between 5000001 AND 5999999 OR
ID Between 6000001 AND 6999999 OR
ID Between 7000001 AND 7999999 OR
ID > 8000000
|
А так нагляднее, но выигрыша в скорости нет:
WHERE ID Not In (1000000,1000001,2000000,3000000,4000000,5000000,6000000,7000000,8000000) Or (ID>8000000)
|
| |
|
| |
|
|
|
| Ну вот. Я же говорил. | |
|
| |
|
|
|
| Привычка искать "общее" решение, часто создает внутренний барьер не "позволяющий" использовать простое перечисление.
Из-за этого даже не подумал просто описать все условия... а перечислению не так уж много, а выигрыш в 2 раза по любому хорошо.
Спасибо.
Ща еще поработаю, потом схожу в баню, а потом выдам еще задачку на проверку состава строки. | |
|
| |
|
|
|
| А я думал это по части кто аригинальнее сократит строку и выдумает нечто более изощренное. А так первое что в голову пришло так это between но он избит уже. | |
|
| |
|
|
|
|
...числа от 0 до 100 000 000...
|
При таких объемах данных сокращать надо не длину строки условия, а время выполнения запроса.
Попутно обнаружилось:
условие ...(id\1000000 <> id/1000000 and id <> 1000001) не возвращает строку с ID=0. | |
|
| |
|
|
|
| звиняюсь за невежество. ID как понимаю - счетчик. 0 - это типа ничего нет (добавление записи) и накой оно нам в результате запроса? | |
|
| |
|
|
|
|
Не обязательно.
Категоричное нет!
0 - это математическое значение, в отличие от Null.
накой оно нам в результате запроса
|
Для этого:
osmor (12.12.2009 в 20:33)
есть набор данных числа от 0 до 100 000 000
...
|
| |
|
| |
|
|
11 Кб. |
|
| Ну вот в примере ID-счетчик.
Добавь в таблицу t1 десяток значений и посмотри на значения ID. | |
|
| |
|
|
|
|
| 1. Счетчик и так всегда считает по порядку, заданному либо при его создании, либо при последнем изменении.
2. Не следует из счетчиков организовывать нумерацию событий, документов и т.д.
3. Если все-таки хочется, что бы значения счетчика не имели разрывов в последовательности,
можно не удалять записи, а присваивать ее полям (кроме счетчика) либо Null (для тех полей где разрешено), либо значения по умолчанию для тех полей, где Null запрещен.
При добавлении:
сначала искать такие "очищенные" записи, и если такая есть, то делать не вставку новой записи,
а обновление значений полей "очищенной" записи.
Если "очищенных" записей нет, тогда вставку новой записи, как обычно. | |
|
| |
|
|
|
| ID как понимаю - счетчик. 0 - это типа ничего нет (добавление записи) и накой оно нам в результате запроса? |
В данном случае id - это не счетчик, это некий идентификатор определяющий принадлежность к определенной группе. т.е. в моем случае он даже не уникальный.
В предметной области заказчика этот атрибут сущности называется "ИД" (АйДи), вот я поле под него и назвал ID. | |
|
| |
|
|
|
| да с 0 я пролетел ...
Кстати надо уточнить у заказчика 0 вообще-то возможен...
Вообще в таблице описывающей диапазоны (есть такая), 0 присутствует, а вот может ли быть реально нужно уточнить...
Но по любому, мое условие нужно менять. | |
|
| |
|
|
|
| А где-же
...задачку на проверку состава строки
|
Интересно ж. Небось ужо сам порешал втихую, а мы ждем. | |
|
| |
|
|
|
| да я ее почти сделал, а сформулировать времени не нашел...
К крестнице и ее маме ходил на ДР, у них разница в один день + несколько лет :-)
там все не сложно... к вечеру может набросаю. | |
|
| |
|
|
|
| Ну раз решил, не трать время по-пусту.
Может как-нибудь потом, когда будет избыток свободного времени,
просто ради интереса. | |
|
| |
|
|
|
| "id\1000000 <> id/1000000" можно заменить на "id mod1000000 <> 0" | |
|
| |
|
|
|
| Я пробовал, но у меня работает медленнее, чем с делениями. | |
|
| |