![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Несколько вопросов о 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)