|
Помогите с SQL-запросом для 1с. | ☑ | ||
---|---|---|---|---|
0
Tedman
14.11.12
✎
10:33
|
Добрый день. Если есть люди, хорошо знакомые с sql-запросами, не могли бы Вы помочь: нужен sql запрос, который бы находил дублирующие строки по определенным колонкам (с этим я справился), и либо удалял 1ую строку (т.к. я заранее уверен, что их всего две одинаковых), либо удалял все, пока не останется только одна.
В 1с-е могу нечто аналогичное сделать за 5 минут, но, к сожалению, тут нужен именно sql. В общем проблема заключается в том, что sql выдаёт ошибку 1505 (неуникальности индекса), и т.к. строк дублирующих много, руками удалять их нереально. Заранее спасибо. |
|||
1
Irek-kazan
14.11.12
✎
10:34
|
не понял запрос sql именно нужен?
по-моему если две абсолютно одинаковые записи не сможет.. |
|||
2
МихаилМ
14.11.12
✎
10:35
|
какой критерий первой строки ?
которую нужно оставить . |
|||
3
МихаилМ
14.11.12
✎
10:36
|
и пичём v8: ?
|
|||
4
МихаилМ
14.11.12
✎
10:37
|
(1)
можно удалить все и вставить одну |
|||
5
Irek-kazan
14.11.12
✎
10:37
|
на sql проще пихнуть без дублей во временную таблицу, почистить исходную, и обратно из временной в исходную. что-то типа:
select distinct *...into #t1 delete from .. insert ... from select * from #t1 |
|||
6
GLazNik
14.11.12
✎
10:38
|
(0) думаю как вариант решения:
1. получаем таблицу строк для удаления (это есть) 2. получаем таблицу строк, которые оставляем (что типа SELECT MAX() FROM GROUP BY) 3. удаляем строки DELETE FROM WHERE (Строка IN (ПерваяТаблица) AND NOT(Строка IN (ВтораяТаблица))) |
|||
7
v8Newbie
14.11.12
✎
10:38
|
(5) И прощай целостность базы.
|
|||
8
v8Newbie
14.11.12
✎
10:39
|
(0) Где строки-то дублируются?
|
|||
9
Irek-kazan
14.11.12
✎
10:40
|
(7) какая целостность? переноси вместе с ключом, да и как я понял тут вообще нет ключевого поля
|
|||
10
Maxus43
14.11.12
✎
10:41
|
(9) ссылочная целостность.
прямыми запросами удалять - зло. З.ы. и нарушение лиц соглашения. На 1с всё можно сделать, а если дубли - дак и обработки есть уже давно |
|||
11
Irek-kazan
14.11.12
✎
10:45
|
(10) типа подколол...
1) у ТС об этом нет речи, я подумал какая-то левая таблица, которую он сам неизвестно для чего формирует 2) если база граматно организована то именно эта ссылочная целостность не даст тебе удалить записи на которые есть ссылки в других таблицах |
|||
12
v8Newbie
14.11.12
✎
10:45
|
(10) В данном случае - лучше, разумеется, средствами 1с, но можно и запросами. Табличные части я так свертывал(баловался-проверял). Но это при условии, что база не участвует в обмене.
|
|||
13
v8Newbie
14.11.12
✎
10:46
|
(11) Именно на это и жалуется ТС
|
|||
14
Maxus43
14.11.12
✎
10:47
|
(11) по 2 - прямым запросам поф на организацию базы.
DELETE FROM WHERE - удалит и не поперхнётся. Если левая таблица - то да, делай что хошь) короче автор скажи своё "Фу, нифига не поняли что мне надо" |
|||
15
Irek-kazan
14.11.12
✎
10:50
|
(14) согласен, ТС должен расписать что хочет, что за таблица и почему не хочет/не может из 1С
|
|||
16
Tedman
14.11.12
✎
10:58
|
(1) Ну... не столько именно SQL запрос,а скорее как сделать средствами SQL.
(2) Строки абсолютно одинаковые. Просто одну из них надо убить. (3) При том, что 1с сделала sql-таблицу такой, а теперь сама же на неё и ругается. (4) Не очень красивый вариант, т.к. проблема, судя по всему, с регистром бухгалтерии Хозрасчетный... а с ним шутки плохи. (5) За мысль спасибо... подумаем-с. Поковыряюсь. (8) Судя по всему в Хозрасчетном регистре. (10) Ну и я так же думал... что на 1с можно сделать всё. Вот только 1с никаких дублей не видит. Исходя из того, что я увидел в sql-таблице идут строки, например: период, регистратор, счет, ещё какие-то колонки, (сумма) 2000,период, регистратор, счет, ещё какие-то колонки, (сумма) -2000, период, регистратор, счет, ещё какие-то колонки, (сумма) 0, период, регистратор, счет, ещё какие-то колонки, (сумма) 0, Т.е., если я всё правильно понял, то уникальный индекс не может создаться именно из-за этих строк с нулём, которые дублируются. Они, как мне кажется, вполне могли возникнуть при либо переходе и переконвертации с 8.1 на 8.1, или с 8.2.13 на 8.2.14 и т.п. И теперь их надо бы убить. Я сильно сомневаюсь, что после их "смерти" целостность базы как-то нарушится. (12) Пробовал стредствами 1с достать проблемные места - не видит 1с их. (14), (15) Да вполне хорошо поняли =))) |
|||
17
Irek-kazan
14.11.12
✎
11:01
|
(16) я правильно понял какие-то строки АБСОЛЮТНО одинаковые? вплоть до ключевых полей?
|
|||
18
Irek-kazan
14.11.12
✎
11:04
|
есть еще один вариант, но не уверен что он прокатит:
-создать поле или автоиндексацией или заполнить его номером строки -потом удалить одинаковые по номеру этого поля |
|||
19
МихаилМ
14.11.12
✎
11:04
|
есть такая беда :
при конвертации с 8.1 на 8.2 не сохздаются некоторые индексы |
|||
20
Tedman
14.11.12
✎
11:08
|
(16) Да... точнее, как я заметил, ключевых полей у них нет.
(19) Во-во. А как лечить толком нигде не описано. Написано, что снять уникальность, а потом ручками и глазками искать и удалять одинаковые строки в таблице sql. Даже если отбросить тот факт, что ссылки там с бинарном коде представлены, и не очень удобны для чтения\сравнения, то таких строк там много тысяч. |
|||
21
Maxus43
14.11.12
✎
11:08
|
дак проблема таки в работоспособности базы вобще? неуникальность индексов? тогда да, 1с не поможет, прямыми запросами наодо удалять...
|
|||
22
Tedman
14.11.12
✎
11:10
|
(21) В том то и дело. Новые документы нормально вводятся и проводятся, и нигде ничего не ругается. А вот когда пришлось отредактировать старые - произошла эта проблема.
|
|||
23
Maxus43
14.11.12
✎
11:13
|
(22) у гилёва не смотрел? там вроде с примерами было
|
|||
24
Irek-kazan
14.11.12
✎
11:13
|
глянь ROW_NUMBER в ms sql
|
|||
25
Irek-kazan
14.11.12
✎
11:15
|
delete from a where rowid in
(select x.ri from( select rowid ri, b, row_number() over (partition by b order by b) as z from a) x where x.z>1) |
|||
26
Tedman
14.11.12
✎
11:18
|
(23) Смотрел. У него там есть примеры, как найти эти строки, но и там, на сколько я смотрел - удаляем вручную.
(25) Спасибо большое. Мысль понял, как попробую-отпишусь. |
|||
27
Maxus43
14.11.12
✎
11:19
|
(26) главно найти, их скорей всего не так много, чтоб удалять вручную было гемороем
|
|||
28
sidalexsandr
14.11.12
✎
11:35
|
(0)
1) Выбрать все полностью совпадающие записи в отдельную таблицу используя DISTINCT. 2)Удалить ВСЕ дубли (все записи, имеющие дубли) 3) Вставить данные из временной таблицы. |
|||
29
sidalexsandr
14.11.12
✎
11:36
|
Вставка данных
INSERT ТаблицаКуда SELECT * FROM ВременнаяТаблица |
|||
30
Serginio1
14.11.12
✎
11:42
|
Можно удалить Top(n-1)
|
|||
31
sidalexsandr
14.11.12
✎
11:55
|
(30) +
SELECT TOP (n-1) * FROM Таблица |
|||
32
sidalexsandr
14.11.12
✎
11:57
|
(0) Вот синтаксис SQL: http://dimonchik.com/sql-count.html
|
|||
33
Tedman
14.11.12
✎
13:22
|
Большое спасибо. Сегодня попробую. О результатах тогда отпишусь!
|
|||
34
sidalexsandr
14.11.12
✎
15:15
|
(33) Будем ждать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |