Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Помогите с Insert / 11 сообщений из 11, страница 1 из 1
20.05.2011, 17:13
    #37271969
Aleksst
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Insert
Добрый день всем Гуру. Столкнулся с проблемой:
Есть таблица:
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 все время пытается вставить перую нашедшую позицию. Как обойти сие?
...
Рейтинг: 0 / 0
20.05.2011, 17:29
    #37271997
Ikir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Insert
Aleksst,

Что должно быть, если такая последовательность:
1 2
1 3
2 1
3 2

или такая
1 1
1 2
1 3
2 1
3 4

?
...
Рейтинг: 0 / 0
20.05.2011, 17:32
    #37272005
Aleksst
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Insert
Ikir,

Фишка в том, что мне надо заполнить пробелы в таблице т.е.
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
...
Рейтинг: 0 / 0
20.05.2011, 17:41
    #37272027
Ikir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Insert
Aleksst,

Непонятно что брать за основу для заполнения "пробелов"?
Сделать всё как у строк с первым столбцом = 1?
Сделать все строки со всеми неповторяющимися значениями во втором столбце?
...
...
Рейтинг: 0 / 0
20.05.2011, 17:44
    #37272033
Aleksst
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Insert
Ikir,

Сделать все строки во втором столбце и они должны быть неповторяющимися, т.е не может быть
1 1
1 1
а
1 1
2 1
Это нормально
...
Рейтинг: 0 / 0
20.05.2011, 17:53
    #37272055
Aleksst
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Insert
На самом деле во втором столбце фиксированные цифры от 1 до 3. главное добавить из с нужным значением первого столбца.
...
Рейтинг: 0 / 0
20.05.2011, 18:04
    #37272074
Ikir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Insert
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;
...
Рейтинг: 0 / 0
20.05.2011, 18:39
    #37272127
Aleksst
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Insert
Ikir,

Не прокатит - есть данные которые не надо вставлять!!!
Надо вставлять именно те - которых нет. В таком варианте вставляется все.
...
Рейтинг: 0 / 0
20.05.2011, 19:09
    #37272175
Aleksst
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Insert
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 (иногда и не один). Надо вставить именно только недостающие.
...
Рейтинг: 0 / 0
20.05.2011, 20:41
    #37272257
Выбегалло
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Insert
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-
...
Рейтинг: 0 / 0
20.05.2011, 20:49
    #37272262
Выбегалло
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Insert
И второй вариант, без 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);
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Помогите с Insert / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]