|
Помогите с Insert
|
|||
---|---|---|---|
#18+
Добрый день всем Гуру. Столкнулся с проблемой: Есть таблица: col1:Col2 1 1 1 2 1 3 2 3 3 2 Задача привести ее к виду col1:Col2 1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3 Пробовал и Insert into d (col1,col2) values ((Select col1 from d where col1 not in ( Select col1 from d where col2 in (1) ) and (col1>61721 and col1<61724)),1); - не дает - говорит - возвращает более 1 строки и процедурой Create procedure zzrr(); DEFINE ii,i1,i3,i4,i5,i6,i7,i8,i9,i0,ii1,ii2,ii3,ii4 int; Foreach Select col1 into ii from d where col1 not in ( Select col1 from d where col2 in (1) ) and (col1>61721 and col1<61724) Insert into d (col1,col2) values (ii,1); end Foreach end procedure; Здесь не меняет переменную и Insert все время пытается вставить перую нашедшую позицию. Как обойти сие? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 17:13 |
|
Помогите с Insert
|
|||
---|---|---|---|
#18+
Aleksst, Что должно быть, если такая последовательность: 1 2 1 3 2 1 3 2 или такая 1 1 1 2 1 3 2 1 3 4 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 17:29 |
|
Помогите с Insert
|
|||
---|---|---|---|
#18+
Ikir, Фишка в том, что мне надо заполнить пробелы в таблице т.е. 1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 17:32 |
|
Помогите с Insert
|
|||
---|---|---|---|
#18+
Aleksst, Непонятно что брать за основу для заполнения "пробелов"? Сделать всё как у строк с первым столбцом = 1? Сделать все строки со всеми неповторяющимися значениями во втором столбце? ... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 17:41 |
|
Помогите с Insert
|
|||
---|---|---|---|
#18+
Ikir, Сделать все строки во втором столбце и они должны быть неповторяющимися, т.е не может быть 1 1 1 1 а 1 1 2 1 Это нормально ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 17:44 |
|
Помогите с Insert
|
|||
---|---|---|---|
#18+
На самом деле во втором столбце фиксированные цифры от 1 до 3. главное добавить из с нужным значением первого столбца. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 17:53 |
|
Помогите с Insert
|
|||
---|---|---|---|
#18+
AleksstСделать все строки во втором столбце и они должны быть неповторяющимися, т.е не может быть Всё равно не понятно, но для вашего первого примера подойдет. SELECT distinct col1 FROM tab1 INTO TEMP t1 WITH NO LOG; SELECT distinct col2 FROM tab1 INTO TEMP t2 WITH NO LOG; INSERT INTO d(col1,col2) SELECT t1.a,t2.b FROM t1,t2; ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 18:04 |
|
Помогите с Insert
|
|||
---|---|---|---|
#18+
Ikir, Не прокатит - есть данные которые не надо вставлять!!! Надо вставлять именно те - которых нет. В таком варианте вставляется все. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 18:39 |
|
Помогите с Insert
|
|||
---|---|---|---|
#18+
IkirAleksstСделать все строки во втором столбце и они должны быть неповторяющимися, т.е не может быть Всё равно не понятно, но для вашего первого примера подойдет. SELECT distinct col1 FROM tab1 INTO TEMP t1 WITH NO LOG; SELECT distinct col2 FROM tab1 INTO TEMP t2 WITH NO LOG; INSERT INTO d(col1,col2) SELECT t1.a,t2.b FROM t1,t2; Если для tab1 я могу получить нужные поля для вставки, то для tab2 получаются "лишние строки". Есть первичный ключь - который выдаст ошибку. Проблема в том, что по каждому col1, есть хоть один col2 (иногда и не один). Надо вставить именно только недостающие. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 19:09 |
|
Помогите с Insert
|
|||
---|---|---|---|
#18+
AleksstIkir, Не прокатит - есть данные которые не надо вставлять!!! Надо вставлять именно те - которых нет. В таком варианте вставляется все. SELECT distinct col1 FROM tab1 INTO TEMP t1 WITH NO LOG; SELECT distinct col2 FROM tab1 INTO TEMP t2 WITH NO LOG; SELECT col1, col2 FROM t1, t2 INTO t3 with no log; MERGE INTO d USING t3 ON (d.col1 = t3.col1 and d.col2 = t3.col3) WHEN NOT MATCHED THEN INSERT VALUES (t3.col1, t3.col2) http://www.ibm.com/developerworks/data/library/techarticle/dm-1102informixmerge/index.html?ca=drs- ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 20:41 |
|
Помогите с Insert
|
|||
---|---|---|---|
#18+
И второй вариант, без MEGRE : create table d (col1 int, col2 int); insert into d values (1,1 ); insert into d values (1,2 ); insert into d values (1,3 ); insert into d values (2,3 ); insert into d values (3,2 ); SELECT distinct col1 FROM d INTO TEMP t1 WITH NO LOG; SELECT distinct col2 FROM d INTO TEMP t2 WITH NO LOG; SELECT col1, col2 FROM t1, t2 INTO TEMP t3 with no log; insert into d select col1, col2 from t3 where not exists (select 1 from d where d.col1 = t3.col1 and d.col2 = t3.col2); ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 20:49 |
|
|
start [/forum/topic.php?fid=44&msg=37272175&tid=1607350]: |
0ms |
get settings: |
20ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
262ms |
get tp. blocked users: |
2ms |
others: | 340ms |
total: | 695ms |
0 / 0 |