Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Составление SQL-запросов > Выборка из БД определённых данных. |
Автор: savmp 25.1.2012, 20:01 |
Здравствуйте! ЕСТЬ база данных и 2 поля в ней ID и DATE 1 Y-3784 2 Y-5674 3 N-7908 4 Y-4672 5 N-5637 6 Y-5634 7 N-6676 ПОДСКАЖИТЕ как задать запрос к базе данных который бы мне вытащил все строки где начало строки начинается с буквы Y После чего я буду использовать цыкл. Большое вам спасибо! |
Автор: $дмитрий 25.1.2012, 20:13 | ||
|
Автор: Gold Dragon 26.1.2012, 07:30 | ||||||||
или так
Если нужно учитывать регистр, то можно так
или
или
|
Автор: savmp 26.1.2012, 16:05 |
А КАК СДЕЛАТЬ ТАКОЕ ID DATA_A DATA_A DATA_A NAME 1 Y-9890 Y-1178 N-0390 ФИРИА-1 2 Y-7878 N-6350 ФИРИА-2 3 N-9090 N-3390 ФИРИА-3 4 Y-7800 N-2333 ФИРИА-4 5 Y-8909 ФИРИА-5 то есть в одной строке есть 3 столбца DATA_A DATA_A DATA_A Нужно вытягивать строки где начало начинается на Y результат должен быть таким 1 Y-9890 ФИРИА-1 1 Y-1178 ФИРИА-1 2 Y-7878 ФИРИА-2 4 Y-7800 ФИРИА-4 5 Y-8909 ФИРИА-5 СПАИБО |
Автор: $дмитрий 26.1.2012, 18:00 |
Перечисли условия через OR |
Автор: savmp 26.1.2012, 18:40 | ||
ПОДСКАЖИ КАК??? Я все варианты перепробовал... но в цыкле ничего не получается. |
Автор: Valinur 26.1.2012, 19:08 | ||
Как минимум 3 столбца не могут иметь одинаковое имя, пусть будут ID DATA_A1 DATA_A2 DATA_A3 NAME Тогда запрос
Это на самом деле худший вариант, т.к. всю таблицу движку придется пройти 3 раза. |
Автор: Gold Dragon 26.1.2012, 19:42 |
цикле ![]() |
Автор: skyboy 27.1.2012, 15:36 |
ребят, вы чего? а слабо использовать substr? |
Автор: krundetz 27.1.2012, 15:53 |
во многих ваших темах вижу такое высказывание, но ни разу ни видел вариантов |
Автор: $дмитрий 27.1.2012, 16:29 |
skyboy, совершенно не слабо, думаешь прирост скорости существенней будет? |
Автор: skyboy 27.1.2012, 17:27 |
не в этом случае. оптимизатор "LIKE 'Y%'" преобразует в эквивалент с подстрокой. но зачем предлагать использование LIKE/REGEXP в этом случае? чтоб следующим вопросом было "а почему у меня на 1000 строк тормозит LIKE a%b%?"? |
Автор: $дмитрий 27.1.2012, 21:00 | ||
Тесты дают интересные результаты 10 000 строк. Где NAME - поле с случайным набор [a-Z0-9]{6}, CHAR - символ от A до Z
При 100, 1000 строк картина та же |
Автор: Zloxa 27.1.2012, 23:39 | ||
Я поначалу думал ты прикалываешься. ![]() Вариант с лайк - единственный из предложенных, который допускает использование индекса. А потому он единственный - не извращенный. ![]() $дмитрий, если уж взялся за тайминги, можешь показать результат отбора по индексированному набору с высокой селективностью? И не на тыще записей, а хотя бы на полумиллионе, тысячные секунды слишком уж близки к погрешности измерения. Добавлено @ 23:54 Оракл, миллион случайных буквенных строк длинной 100 символов, с индексом
Мася, афайк, тоже умеет использовать индекс для отбора по лайку, при условии захвата паттерна с начала строки. |
Автор: Zloxa 27.1.2012, 23:58 | ||
Чота я сначала опубликовал результат, а потом его сам посмотрел и диву дался... оказалось я индекс не построил. ![]() Вот результат с индексом:
|
Автор: $дмитрий 28.1.2012, 03:59 |
1 000 000 строк Перебор от A до Z, без индексов LIKE 20.586 SUBSTR 24.132 REGEXP 34.003 Перебор от A до Z, с индексами LIKE 1.338 SUBSTR 22.806 REGEXP 31.605 Один запрос, без индексов LIKE 0.809 SUBSTR 1.053 REGEXP 1.263 Один запрос, с индексами LIKE 0.079 SUBSTR 0.862 REGEXP 1.173 |
Автор: Gold Dragon 28.1.2012, 09:57 |
ну вообще-тоне предлагал, а написал какие ещё варианты есть. И после $дмитрия видны даже результаты что и когда использовать ![]() пусть человек получит больше на свой вопрос, чем сухой один ответ ;) |