Форум: "Базы";
Текущий архив: 2010.11.28;
Скачать: [xml.tar.bz2];
Внизудаление повторяющихся записей в таблице Найти похожие ветки
← →
Mery (2009-07-21 14:07) [0]Каким образом удалить из таблицы записи-дубли? Если создаю уникальный индекс, то при атоматическом добавлении записей в эту таблицу выходит сообщение о нарушении индекса. Хочется, чтоб никаких сообщений не выдавалось, а запись не добавлялась.
← →
Кщд (2009-07-21 14:25) [1]>Mery (21.07.09 14:07)
ловите и обрабатывайте исключение
← →
PEAKTOP © (2009-07-21 15:17) [2]> Если создаю уникальный индекс, то при атоматическом добавлении записей в эту таблицу выходит сообщение о нарушении индекса
О первичных ключах знаем ?
http://firebirdsql.su/doku.php?id=constraint
Об автогенерации первичного ключа знаем ?
http://firebirdsql.su/doku.php?id=gen_id
← →
Anatoly Podgoretsky © (2009-07-21 15:23) [3]> PEAKTOP (21.07.2009 15:17:02) [2]
Да не должно быть дублей в нормально спроектированой системе.
← →
СовестьДМ © (2009-07-21 19:49) [4]+
О проектировании знаем ?
О системах знаем ?
или как обычно - ничего не знаю, но пишу суперпрограммы?
← →
Mery (2009-07-22 06:40) [5]как всегда все ТАКИЕ УМНЫЕ, так и блещут своей мудростью, не более того...
В моём случае есть таблица1 с датами (поле Date1), привязанными к клиенту (поле MEN1). И есть таблица2, в которую автоматически (при нажатии пользователем на кнопку) вставляются записи с таким же полем с кодом клиента и с датой=Таблица1.Date1+30. Мне нужно исключить появление повторных записей-дублей в таблице2 при повторном нажатии пользоателей на кнопочку формирования записей в таблице2. Вот и вопрос: как исключить эти записи-дубли именно в этом случае? ОЧЕНЬ надеюсь на РЕАЛЬНУЮ помощь. А вот это оставь СОВЕСТЬ ДМ при себе, будь любезен.
<или как обычно - ничего не знаю, но пишу суперпрограммы?
← →
turbouser © (2009-07-22 08:27) [6]
> Mery (22.07.09 06:40) [5]
> ОЧЕНЬ надеюсь на РЕАЛЬНУЮ помощь
Больше можешь не надеяться.
← →
Виталий Панасенко (2009-07-22 09:11) [7]а помощь почитать слабо? о try..except/finally не слышали ничего? стандартная конструкция Object Pascal..ой, изывиняюсь! уже ж Delphi!
← →
Mery (2009-07-22 09:38) [8]как конкретно try..except/finally использовать в моём случае?
в try добавить запись в таблицу, а как построить условие для исключения?
← →
Сергей М. © (2009-07-22 10:02) [9]
> как построить условие для исключения?
Выясни это сама:
try
.. попытка добавления записи ..
except
on e: Exception do ShowMessage(e.Classname + " " + e.message);
end;
← →
PEAKTOP © (2009-07-22 11:12) [10]> Мне нужно исключить появление повторных записей-дублей в
> таблице2 при повторном нажатии пользоателей на кнопочку
> формирования записей в таблице2. Вот и вопрос: как исключить
> эти записи-дубли именно в этом случае?
ALTER TABLE "таблица2"
ADD CONSTRAINT "CUNQ_таблица2_NO_DUPL" ("Date1", "MEN1") USING INDEX "INDX_таблица2_NO_DUPL";
ну и EXCEPTION отлавливать на клиенте, соответственно.
← →
HandBrake (2009-07-22 12:53) [11]To Mery
Может Вам это подойдет (если я Вас правильно понял)?CREATE TABLE TABLE1
(
DATE1 DATE,
MEN1 INTEGER
);
CREATE TABLE TABLE2
(
DATE2 DATE,
MEN2 INTEGER
);
и хранимка для Вашей кнопочкиCREATE PROCEDURE PR_NODUPLICATES AS
BEGIN
insert into Table2
(date2, men2)
select
T1.DATE1+30,
T1.MEN1
from
Table1 T1
where
CAST((T1.DATE1+30) as char(10)) || CAST(T1.MEN1 as varchar(18))
not in (select distinct
CAST((T3.DATE2) as char(10)) || CAST(T3.MEN2 as varchar(18))
from
Table2 T3);
END
просто такой подход плох на больших объемах: условие Where идет с перегрузкой, Вы можете вообще не дождаться окончания операции. Думаю лучше все-таки пересмотреть рел. модель Базы, а не мучиться с "хромой".
← →
turbouser___ (2009-07-22 13:15) [12]
> HandBrake
>not in (select distinct
NOT EXISTS(...
тогда уж...
← →
Кщд (2009-07-22 13:20) [13]>HandBrake (22.07.09 12:53) [11]
CAST((T1.DATE1+30) as char(10)) || CAST(T1.MEN1 as varchar(18))
not in (select distinct
CAST((T3.DATE2) as char(10)) || CAST(T3.MEN2 as varchar(18))
from
Table2 T3)
читать про correlated subquery
только потом подходить к базе
← →
HandBrake (2009-07-22 14:36) [14]Пообедал. Добрый:).
Уважаемый Кщд, я так понял, Вы о "large cost".
Знаю и согласен с Вами: сам и предупредил об этом, хотя, может и объяснил не очень здорово.
К базе не подойду, пока не прочитаю все ссылки о correlated subquery :)
Существует способ вычислить вставляемые строки способом отличным от моего в операторе SELECT?
Если Да, приведете код такого SELECTа, буду признателен, а то я чего то торможу.
← →
PEAKTOP © (2009-07-22 15:04) [15]
> where
> CAST((T1.DATE1+30) as char(10)) || CAST(T1.MEN1 as varchar(18))
> not in (select distinct
> CAST((T3.DATE2) as char(10)) || CAST(T3.MEN2
> as varchar(18))
> from
> Table2 T3);
> END
С ума сойти ...
CREATE PROCEDURE PR_NODUPLICATES AS
BEGIN
insert into Table2
(date2, men2)
select
T1.DATE1+30,
T1.MEN1
from
Table1 T1
where NOT(EXISTS(SELECT T3.DATE2 FROM TABLE2 T3 WHERE (T3.DATE2 = (T1.DATE1+30)AND(T3.MEN2 = T1.MEN1))));
END
← →
turbouser___ (2009-07-22 15:27) [16]:)
← →
HandBrake (2009-07-22 15:33) [17]To PEAKTOP ©
Спасибо, реально тормознул:)
← →
HandBrake (2009-07-22 20:54) [18]To turbouser___ (22.07.09 15:27) [16]
Спасибо!
Читать мне не перечитать основы SQL. Даже стыдно...
Ладно, зато Урок.
← →
Mery (2009-07-23 08:18) [19]Спасибо за ответ.
При вызове процедуры из приложения возникает ошибка: при выполненнии insert в таблицу автоматически не генерируется первичный ключ этой таблицы, хотя генератор задан.
← →
Виталий Панасенко(дом) (2009-07-23 08:31) [20]если б еще эти самые генераторы научиться использовать...:-) www.ibase.ru, точнее http://ibase.ru/devinfo/generator.htm
← →
Mery (2009-07-23 08:42) [21]>Виталий Панасенко(дом) (23.07.09 08:31) [20]
вопрос как их использовать, если вызвана вставка в таблицу из процедуры
← →
Mery (2009-07-23 08:44) [22]>Виталий Панасенко(дом) (23.07.09 08:31) [20]
за ссылку спасибо. просто ни разу не использовала процедуры. нужно будет поучиться, согласна.
← →
makz (2009-07-24 13:34) [23]DELETE FROM TABLE1 t1
WHERE EXISTS (
SELECT 1 FROM TABLE1 t2
WHERE t1.COL1 = t2.COL1 and t1.COL2 = t2.COL2
AND t1.RDB$DB_KEY < t2.RDB$DB_KEY
)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2010.11.28;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.003 c