Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL-запрос на проверку существование записи [D7, Paradox]


Страницы:   1 2

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 наверное лишнее....


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо