Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизSQL-запрос на проверку существование записи Найти похожие ветки
← →
Dmitry_177 (2007-03-28 23:03) [0]В таблице Table.DB есть поле Name, мне нужно сделать такой запрос, чтобы определить есть-ли такое имя уже или нету..
Вот так правильно будет?
SELECT Name FROM Klients.DB WHERE Name="имя"
или есть какие-то еще запросы на существование поля?
← →
Sergey13 © (2007-03-29 08:27) [1]count, exists
← →
Johnmen © (2007-03-29 08:52) [2]
> мне нужно сделать такой запрос, чтобы определить есть-ли
> такое имя уже или нету..
Такая потребность говорит о кривом проектировании.
← →
ЮЮ © (2007-03-29 09:01) [3]1) TSession.GetFieldNames
2) DbiOpenFieldList
3) SELECT * FROM Klients WHERE <быстрое условие, возвращающее минимум строк> + TDataSet.Fields
← →
Mike Kouzmine © (2007-03-29 09:48) [4]Делаешь индекс где поле наме первое и делаешь setrange([name],[name]). Плучаешь всех name
← →
ЮЮ © (2007-03-29 09:59) [5]>ЮЮ © (29.03.07 09:01) [3]
Сорри. Почему-то прочитал вопрос, как "определить есть ли поле "Name" в таблице" ибо "есть какие-то еще запросы на существование поля"
Автору. Если же речь идет о существовании записей с нужным значением поля, то чем, собственно, не усраивает собственное решение? Разве что (см. TQuery.Params)SELECT Name FROM Klients WHERE Name= :Name
← →
Jan (2007-03-29 10:11) [6]
> count, exists
count наверное лишнее....
← →
Sergey13 © (2007-03-29 10:31) [7]> [6] Jan (29.03.07 10:11)
Наоборот, ИМХО, самое удобное. Ибо гарантировано вернет датасет с 1 записью с количеством найденых, в то время как в других вариантах может и не вернуть записей. И это надо учитывать при обработке результата.
← →
Jan (2007-03-29 10:54) [8]
> Наоборот, ИМХО, самое удобное.
наверное для Парадокса. Потому как в других СУБД где есть возможность вернуть скалярный результат, exists выиграет так как count это медленная операция.
← →
Sergey13 © (2007-03-29 10:59) [9]> [8] Jan (29.03.07 10:54)
Почему медленная? Count(индексное поле) отработает быстро, а exists по неидексированому - как повезет. Так что не только в операторе дело + (в конкретно этом случае) я согласен с [2] Johnmen © (29.03.07 08:52).
← →
Jan (2007-03-29 11:01) [10]
>
> Почему медленная? Count(индексное поле) отработает быстро,
> а exists по неидексированому - как повезет.
count должен проверить все записи удовлетворяющие условию, а exists - только первую. Разница ощутима. Ну а индексы это само собой разумеется. При одинаковых условиях exists выиграет с большим заделом.
← →
Jan (2007-03-29 11:04) [11]
> я согласен с [2] Johnmen © (29.03.07 08:52).
не вижу кривого проектирования для того чтобы проверить есть запись или нет.
← →
Sergey13 © (2007-03-29 11:09) [12]> [10] Jan (29.03.07 11:01)
Я не отрицаю твоей правоты, но она даст ощутимые результаты не везде и не всегда. А в конкретном случае с Парадоксом надо еще постараться это вообще применить.
← →
ANB © (2007-03-29 11:10) [13]
> count должен проверить все записи удовлетворяющие условию,
> а exists - только первую.
На MS SQL сидим ?
В оракле, например, exists можно только в where части использовать.
А запрос select count(*) from Table1 where name = :Name and rownum <= 1
тоже очень шустро отработает, да и работу прекратит после нахождения первой попавшейся записи. А если индекс по name еще и уникальный, то и rownum <= 1 не нужен.
← →
Jan (2007-03-29 11:17) [14]
> Я не отрицаю твоей правоты, но она даст ощутимые результаты
> не везде и не всегда. А в конкретном случае с Парадоксом
> надо еще постараться это вообще применить.
убедил :) но насчет Парадокса...
← →
Jan (2007-03-29 11:18) [15]
> А запрос select count(*) from Table1 where name = :Name
> and rownum <= 1
а ты план смотрел? ты видел что он сделает сначала и когда применит rownum <= 1?
← →
Johnmen © (2007-03-29 11:20) [16]
> не вижу кривого проектирования для того чтобы проверить
> есть запись или нет.
Вопрос автора звучит по-другому.
← →
Jan (2007-03-29 11:27) [17]
> На MS SQL сидим ?
все это можно и на FB сделать
← →
Jan (2007-03-29 11:35) [18]
> Вопрос автора звучит по-другому.
но мы то поняли что автор имел в виду вместо "поле" - "запись", "строка" и т.п.?
← →
Johnmen © (2007-03-29 12:35) [19]
> но мы то поняли что автор имел в виду вместо "поле" - "запись",
> "строка" и т.п.?
Я не знаю, что вы поняли. Но сути не уловили....
← →
Jan (2007-03-29 12:36) [20]
> Я не знаю, что вы поняли. Но сути не уловили....
Ну и какую же суть уловили Вы?
← →
ANB © (2007-03-29 13:09) [21]
> а ты план смотрел? ты видел что он сделает сначала и когда
> применит rownum <= 1?
есть другой вариант ? А rownum он применит во время подсчета записей, т.е. результат может быть только 0 или 1. Тут и план смотреть не надо.
← →
Jan (2007-03-29 13:29) [22]
> А rownum он применит во время подсчета записей,
Это как?
> т.е. результат может быть только 0 или 1. Тут и план смотреть
> не надо.
не будет там 0 или 1. А план стоит посмотреть.
← →
Jan (2007-03-29 13:37) [23]
> ANB © (29.03.07 13:09) [21]
ты прав. извини.
← →
ANB © (2007-03-29 14:33) [24]
> ты прав. извини.
Я вчера до 18.00 тоже думал, что не будет 0 или 1. Пока не попробовал :)
← →
Anatoly Podgoretsky © (2007-03-29 22:37) [25]> Sergey13 (29.03.2007 10:31:07) [7]
А здесь не надо?
Тут придется делать лишнии шаги.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.056 c