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

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

Несколько вопросов о SQL [D6, FireBird 1.0]


_toltec ©   (2003-04-20 20:09:00) 

1. Как узнать используется кем-нибуть таблица?
2. Есть таблица

Create table Tab1
(
f1 varchar(10),
f2 integer
)

вней есть две одинаковые стоки.
как с помощью delete from удалить одну из них?

3. Почему при использование Upper в параметре которого строка
из русских букв он непереводит ее в верхний регистр?


Johnmen   (2003-04-21 14:02:00) [1]

>Zacho © (21.04.03 13:44)

Мне это тоже крайне удивительно...Т.к. логика не прослеживается...:)))


NickBat   (2003-04-21 13:49:00) [2]

> Johnmen © (21.04.03 13:41)
А я и написал Firebird. :))
А вообще-то до такой ситуации (дублирование записей) лучше не доходить.


Zacho   (2003-04-21 13:44:00) [3]


> Johnmen © (21.04.03 13:41)

Согласен. Но меня сильно удивило, что Дятел 1.1.854 удалил единственную запись с F1=3


Johnmen   (2003-04-21 13:41:00) [4]

WI-V6.2.908 Firebird 1.0

Указанный запрос срабатывает, как ожидается. Что и понятно, т.к. логика работы сервера предполагает выполнение подзапроса на каждую анализируемую для удаления запись. Но ! На данное поведение оптимизатора сервера - его личное дело. И нет гарантий, что в другой сервер сначала выполнит селект, а потом делете. А в этом случае данный запрос некорректен.


Соловьев   (2003-04-21 13:20:00) [5]

согласен с PK. его то и делать всего-то ничего...


Zacho   (2003-04-21 13:18:00) [6]


> NickBat © (21.04.03 12:58)

Сейчас проверил на YA 854. Вообще какая-то фигня получается.
Итак: CREATE TABLE TEST (F1 INTEGER)
Заполняем: 1,1,3,4,4,2,2
Выполняем запрос NickBat © (21.04.03 11:44)
Получаем: 1,1
Выполняем второй раз, остается одна запись со значением 1
Ужас какой-то. Баг (или фича) в этой сборке YA ??
И все равно я уверен, что должен быть ПК и проблем таких не будет.


NickBat   (2003-04-21 12:58:00) [7]

> Zacho © (21.04.03 11:52)
Так удалятся записи у которых дублируется поле f1, при этом по однойзаписи останется. Можешь проверить.


Zacho   (2003-04-21 11:52:00) [8]


> NickBat © (21.04.03 11:44)

Так удалятся всеповторяющиеся записи (точнее даже все записи с повторяющимся значением f1). А человеку нужно, чтобы удалились только дубликаты, т.е. чтобы по одной записи осталось.
А вообще нефиг делать таблицы без первичного ключа.


NickBat   (2003-04-21 11:44:00) [9]

Удалить дублирующиеся записи можно и так:

delete from test
where f1 in
(select f1
from test
group by f1
having count(f1)>1)

Проверено на Firebird диалект 1.


Соловьев   (2003-04-21 11:41:00) [10]


> 3. Стандартная Upper не поддерживает неанглийские кодировки.
> Надо использовать UDF

а как же upper(field collate PXW_CYRL)


Johnmen   (2003-04-21 09:46:00) [11]

>Zacho © (21.04.03 08:23)
>Rad © (21.04.03 08:43)
>Вай-вай, че-то я совсем уже плохой стал.
>Да, конечно, есть.

Блокировок нет вообще никаких !
Есть только некие способы имитировать их для постороннего наблюдателя...:)


Rad   (2003-04-21 08:43:00) [12]

>> Но, вообще, никак - нет в FB блокировки на уровне таблицы
> Неверно, есть.
Вай-вай, че-то я совсем уже плохой стал.
Да, конечно, есть.
Но узнать, кемона используется все равно нельзя. Да и узнать, что вообще используется - обычно тоже (кроме, разумеется случая с SNAPSHOT TABLE STABILITY)


Zacho   (2003-04-21 08:23:00) [13]


> Rad © (20.04.03 20:51)
> 1. В каком смысле?
> Но, вообще, никак - нет в FB блокировки на уровне таблицы

Неверно, есть. Смототри SNAPSHOT TABLE STABILITY (consistency)
Подробно читать в Language Reference и http://www.ibase.ru/devinfo/ibtrans.htm


Rad   (2003-04-20 20:54:00) [14]

Стандартная Upper не поддерживает неанглийские кодировки. Надо использовать UDF

Ну или делать базу, как написано тут: http://www.ibase.ru/devinfo/ibrusfaq.htm


Rad   (2003-04-20 20:51:00) [15]

1. В каком смысле?
Но, вообще, никак - нет в FB блокировки на уровне таблицы

2. rdb$db_key(см http://www.ibase.ru/devinfo/deldupes.htm)

3. Стандартная Upper не поддерживает неанглийские кодировки. Надо использовать UDF (например, RFunc - http://www.ibase.ru/d_udf.htm)


Наверх

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