|
Реализация измерений в SQL | ☑ | ||
---|---|---|---|---|
0
vhl
13.02.15
✎
13:15
|
Есть своя база sql. Есть допустим таблица с колонками с1,с2,с3.
Например надо поменять колонку с3 у записи, в которой измерения с1 = 'val1' и с2 = 'val2'. Посмотрел как 1С это делает: DELETE FROM MyTable WHERE c1 = 'val1' AND c2 = 'val2' INSERT INTO MyTable (c1,c2,c3) VALUES ('val1', 'val2','val3') Это нормальная практика или может как-то попроще без доп. записей? |
|||
1
H A D G E H O G s
13.02.15
✎
13:15
|
Update же!
|
|||
2
Jaap Vduul
13.02.15
✎
13:20
|
Вообще зависит от логики приложения и структуры таблицы.
Если комбинация с1 и с2 не является уникальным ключом, то реузльтат del+ins и upd может сильно отличаться. |
|||
3
vhl
13.02.15
✎
13:28
|
(1) update не добавит запись если ее нет в базе
|
|||
4
vhl
13.02.15
✎
13:28
|
(2) с1+с2 уникальны
|
|||
5
Лефмихалыч
13.02.15
✎
13:30
|
(3) именно по этому 1С его и не использует при записи наборов регистров
|
|||
6
igork1966
13.02.15
✎
13:31
|
(0) UPDATE MyTable SET c3 = 'val3' WHERE c1 = 'val1' AND c2 = 'val2'
если запись действительно одна |
|||
7
vhl
13.02.15
✎
13:32
|
(6) см (3)
|
|||
8
igork1966
13.02.15
✎
13:32
|
(6) + или тебе требуется несколько записей изменить
|
|||
9
igork1966
13.02.15
✎
13:34
|
(0)(7) ОООО сорри это же про регистры речь!
|
|||
10
ShoGUN
13.02.15
✎
13:34
|
(7) А в чём вопрос? Записи без INSERT не добавить. Лишние без DELETE не удалить. Разве что два запроса - один на UPDATE, другой на DELETE+INSERT, но мне почему-то кажется, что это не быстрее и не проще.
|
|||
11
vhl
13.02.15
✎
13:39
|
(10) ну,я не настоящий sql-щик, поэтому и спрашиваю, может есть поумнее что-то чем delete+insert
|
|||
12
vhl
13.02.15
✎
13:40
|
вот есть REPLACE функция, только какая-то она ущербная
|
|||
13
Garikk
13.02.15
✎
13:42
|
Эта ф-ция не ущербная, она просто на данные не влияет... если я не ошиюаюсь
|
|||
14
ShoGUN
13.02.15
✎
13:43
|
(11) На конкретный вопрос в (0) - UPDATE. Но у операторов чёткое разграничение - UPDATE не может добавлять/удалять записи, что для регистра не подходит.
REPLACE - это функция для работы со строками, к вопросу в (0) не имеет вообще никакого отношения. |
|||
15
vhl
13.02.15
✎
13:44
|
(13) я так понял она только со строками работает и только с одной колонкой, так - вполне себе меняет:
UPDATE authors SET city = replace(city, 'Salt', 'Olympic') WHERE city LIKE 'Salt%' |
|||
16
Garikk
13.02.15
✎
13:44
|
(15) я про REPLACE
|
|||
17
vhl
13.02.15
✎
13:45
|
(15) фак, понял, что тупанул :(
|
|||
18
trad
13.02.15
✎
13:48
|
вариант 1
delete insert вариант 2 if exists(select) update else insert вариант 3 update if @@rowcount = 0 insert - выбери себе |
|||
19
trad
13.02.15
✎
13:49
|
я пользую 3
|
|||
20
rsv
13.02.15
✎
14:18
|
(0) Это сработает на любой заявленной в поддержку 1С СУБД. ANSI так сказать.
|
|||
21
rsv
13.02.15
✎
14:18
|
(18) А вот это ... не на любой.
|
|||
22
vhl
13.02.15
✎
14:40
|
(18) ок, спасибо.
(21) мне не для 1с надо |
|||
23
Ёпрст
13.02.15
✎
14:44
|
(22)он не про 1с..а про версии субд
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |