![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL-запрос на проверку существование записи [D7, Paradox]
Dmitry_177 © (2007-03-28 23:03:00)В таблице Table.DB есть поле Name, мне нужно сделать такой запрос, чтобы определить есть-ли такое имя уже или нету..
Вот так правильно будет?
SELECT Name FROM Klients.DB WHERE Name='имя'
или есть какие-то еще запросы на существование поля?
Anatoly Podgoretsky (2007-03-29 22:37:00) [1]> Sergey13 (29.03.2007 10:31:07) [7]
А здесь не надо?
Тут придется делать лишнии шаги.
ANB (2007-03-29 14:33:00) [2]
> ты прав. извини.
Я вчера до 18.00 тоже думал, что не будет 0 или 1. Пока не попробовал :)
Jan (2007-03-29 13:37:00) [3]
> ANB © (29.03.07 13:09) [21]
ты прав. извини.
Jan (2007-03-29 13:29:00) [4]
> А rownum он применит во время подсчета записей,
Это как?
> т.е. результат может быть только 0 или 1. Тут и план смотреть
> не надо.
не будет там 0 или 1. А план стоит посмотреть.
ANB (2007-03-29 13:09:00) [5]
> а ты план смотрел? ты видел что он сделает сначала и когда
> применит rownum <= 1?
есть другой вариант ? А rownum он применит во время подсчета записей, т.е. результат может быть только 0 или 1. Тут и план смотреть не надо.
Jan (2007-03-29 12:36:00) [6]
> Я не знаю, что вы поняли. Но сути не уловили....
Ну и какую же суть уловили Вы?
Johnmen (2007-03-29 12:35:00) [7]
> но мы то поняли что автор имел в виду вместо "поле" - "запись",
> "строка" и т.п.?
Я не знаю, что вы поняли. Но сути не уловили....
Jan (2007-03-29 11:35:00) [8]
> Вопрос автора звучит по-другому.
но мы то поняли что автор имел в виду вместо "поле" - "запись", "строка" и т.п.?
Jan (2007-03-29 11:27:00) [9]
> На MS SQL сидим ?
все это можно и на FB сделать
Johnmen (2007-03-29 11:20:00) [10]
> не вижу кривого проектирования для того чтобы проверить
> есть запись или нет.
Вопрос автора звучит по-другому.
Jan (2007-03-29 11:18:00) [11]
> А запрос select count(*) from Table1 where name = :Name
> and rownum <= 1
а ты план смотрел? ты видел что он сделает сначала и когда применит rownum <= 1?
Jan (2007-03-29 11:17:00) [12]
> Я не отрицаю твоей правоты, но она даст ощутимые результаты
> не везде и не всегда. А в конкретном случае с Парадоксом
> надо еще постараться это вообще применить.
убедил :) но насчет Парадокса...
ANB (2007-03-29 11:10:00) [13]
> count должен проверить все записи удовлетворяющие условию,
> а exists - только первую.
На MS SQL сидим ?
В оракле, например, exists можно только в where части использовать.
А запрос select count(*) from Table1 where name = :Name and rownum <= 1
тоже очень шустро отработает, да и работу прекратит после нахождения первой попавшейся записи. А если индекс по name еще и уникальный, то и rownum <= 1 не нужен.
Sergey13 (2007-03-29 11:09:00) [14]> [10] Jan (29.03.07 11:01)
Я не отрицаю твоей правоты, но она даст ощутимыерезультаты не везде и не всегда. А в конкретном случае с Парадоксом надо еще постараться это вообще применить.
Jan (2007-03-29 11:04:00) [15]
> я согласен с [2] Johnmen © (29.03.07 08:52).
не вижу кривого проектирования для того чтобы проверить есть запись или нет.
Jan (2007-03-29 11:01:00) [16]
>
> Почему медленная? Count(индексное поле) отработает быстро,
> а exists по неидексированому - как повезет.
count должен проверить все записиудовлетворяющие условию, а exists - только первую. Разница ощутима. Ну а индексы это само собой разумеется. При одинаковых условиях exists выиграет с большим заделом.
Sergey13 (2007-03-29 10:59:00) [17]> [8] Jan (29.03.07 10:54)
Почему медленная? Count(индексное поле) отработает быстро, а exists по неидексированому - как повезет. Так что не только в операторе дело + (в конкретно этом случае) я согласен с [2] Johnmen © (29.03.07 08:52).
Jan (2007-03-29 10:54:00) [18]
> Наоборот, ИМХО, самое удобное.
наверное для Парадокса. Потому как в других СУБД где есть возможность вернуть скалярный результат, exists выиграет так как count это медленная операция.
Sergey13 (2007-03-29 10:31:00) [19]> [6] Jan (29.03.07 10:11)
Наоборот, ИМХО, самое удобное. Ибо гарантировановернет датасет с 1 записью с количеством найденых, в то время как в других вариантах может и не вернуть записей. И это надо учитывать при обработке результата.
Jan (2007-03-29 10:11:00) [20]
> count, exists
count наверное лишнее....