Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Профессионалы Помогите с update  [new]
AndroN-RUS
Member

Откуда: Красноярск
Сообщений: 10358
Профессионалы Помогите с update

Есть 2 таблици

Таблица Tabl1 Tabl2
Колонки ID1 ID2 ID3 ID1 ID222 ID333
QW 3 25 QW 3 71
................другие строки.......
QW 3 43 QW 3 67
................другие строки.......
QW 3 54 QW 3 25
................другие строки.......
QW 3 78 QW 3 89
Нужно получить
Таблица Tabl1 Tabl2
Колонки ID1 ID2 ID3 ID1 ID222 ID333
QW 3 25 QW 3 25
QW 3 43 QW 3 43
QW 3 54 QW 3 54
QW 3 78 QW 3 78

update t2 set t2.ID333=t1.ID3
from Table1 t1,Table t2
where (t1.ID1=t2.ID1) AND (t1.ID2=t2.ID222)
Если таким образом делать то у меня поидее получится
Таблица Tabl1 Tabl2
Колонки ID1 ID2 ID3 ID1 ID222 ID333
QW 3 25 QW 3 78
................другие строки.......
QW 3 43 QW 3 78
................другие строки.......
QW 3 54 QW 3 78
................другие строки.......
QW 3 78 QW 3 78
Так как мне всетаки запрос та написать чтоб у меня получилось именно так как мне надо???

С Уважением AndroN-RUS
24 ноя 05, 15:09    [2104524]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
AndroN-RUS
Member

Откуда: Красноярск
Сообщений: 10358
Повторюсь есче раз а то таблици плохо понятны
Профессионалы Помогите с update

Есть 2 таблици

Таблица-----Tabl1------------Tabl2
Колонки-|ID1--ID2--ID3-|-ID1--ID222--ID333
-------------|QW--3----25---QW---3------71
................другие строки.......
-------------|QW--3----43---QW---3------67
................другие строки.......
-------------|QW--3----54---QW---3------25
................другие строки.......
-------------|QW--3----78---QW---3------89
Нужно получить
Таблица-----Tabl1------------Tabl2
Колонки-|ID1--ID2--ID3-|-ID1--ID222--ID333
-------------|QW--3----25---QW---3------25
-------------|QW--3----43---QW---3------43
-------------|QW--3----54---QW---3------54
-------------|QW--3----78---QW---3------78

update t2 set t2.ID333=t1.ID3
from Table1 t1,Table t2
where (t1.ID1=t2.ID1) AND (t1.ID2=t2.ID222)

Если таким образом делать то у меня поидее получится
Таблица-----Tabl1------------Tabl2
Колонки-|ID1--ID2--ID3-|-ID1--ID222--ID333
-------------|QW--3----25---QW---3------78
-------------|QW--3----43---QW---3------78
-------------|QW--3----54---QW---3------78
-------------|QW--3----78---QW---3------78
Так как мне всетаки запрос та написать чтоб у меня получилось именно так как мне надо???

С Уважением AndroN-RUS
24 ноя 05, 15:24    [2104630]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
Нумеруйте записи и делайте join по порядковому номеру. Иначе - курсором.
24 ноя 05, 15:32    [2104699]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
AndroN-RUS
Member

Откуда: Красноярск
Сообщений: 10358
Посмотрел придумал свой вариант

declare @P int
set @P=0
update test set rank=@P, @P=@P+1

Но что мне это дало когда я пронумеровал строки дальше та как запрос будет выглядеть???
25 ноя 05, 05:53    [2106735]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
AndroN-RUS
Member

Откуда: Красноярск
Сообщений: 10358
Блин стока народу уже прочитала что никто незнает???
Ну помогите плиззззз..... очень надо
25 ноя 05, 12:00    [2107966]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
приведите пример зполненияч данных и выходной таблички, потому как всем в лом придумывать....
-------------------------------------
Jedem Das Saine
25 ноя 05, 12:05    [2108005]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
Если чесно, то плохо понял задачу.
Вопрос: по какому принципу понять, что
QW--3----25 соответствует QW---3------71, а
QW--3----43 соответствует QW---3------67 ?
Возможное решение: удалить все строки из Tabl2 и перезакачать в нее все строки из Tabl1. Тогда и получиться:

Таблица-----Tabl1------------Tabl2
Колонки-|ID1--ID2--ID3-|-ID1--ID222--ID333
-------------|QW--3----25---QW---3------25
-------------|QW--3----43---QW---3------43
-------------|QW--3----54---QW---3------54
-------------|QW--3----78---QW---3------78
25 ноя 05, 12:10    [2108047]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
To Maxx
если уж по немецки, то Seine
25 ноя 05, 12:13    [2108082]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
AndroN-RUS
Member

Откуда: Красноярск
Сообщений: 10358
Принцеп заключается по положению в таблице
1-QW--3----25 соответствует 1-QW---3------71
2-QW--3----43 соответствует 2-QW---3------67

Вот мне и надо в такойже последовательности записать
1-QW--3----25 соответствует 1-QW---3------25
2-QW--3----43 соответствует 2-QW---3------43

А удолять нельзя потомучто во второй таблице есть другии колонки которые являются идентификаторами в других таблицах
25 ноя 05, 12:18    [2108119]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
AndroN-RUS
Блин стока народу уже прочитала что никто незнает???
Ну помогите плиззззз..... очень надо


Опишите задачу так, чтобы ее удобно было читать.

Какие данные есть - в виде SQL скрипта,
что нужно получить - в виде csv.

Я, к примеру, Ваши каракули и читать не стал
25 ноя 05, 12:26    [2108181]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
AndroN-RUS
Принцеп заключается по положению в таблице
То есть, принцип "по времени записи в таблицу". Тогда нужно как-то в этих таблицах этот принцип зафиксировать. Например создать identity-столбец или столбец, в котором будет фиксироваться время. А потом использовать его для
определения соответсвия между строк таблицы.
Еще вариант: сейчас можно как-то определить (м.б. создав третью таблицу), что для QW--3 25 соответствует 71, а 43 - 67?
25 ноя 05, 12:27    [2108183]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Glory
Member

Откуда:
Сообщений: 104760
AndroN-RUS
Блин стока народу уже прочитала что никто незнает???
Ну помогите плиззззз..... очень надо

https://www.sql.ru/forum/actualthread.aspx?tid=127456 Пункт 6
25 ноя 05, 12:28    [2108192]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
AndroN-RUS
Member

Откуда: Красноярск
Сообщений: 10358
Данных в виде SQL нету

Да и есче перезакачивать все строки из Tabl1 в Tabl2 нельзя потомучто в Tabl1 очень много строк которых нет в Tabl2

Tabl1
QW--3----25
TR---8----75
QW--3----43
RT---2----45
RT---2----37
QR--12----47

Неправельный Tabl2
QW--3----12
QW--3----32
RT---2----1
RT---2----35
А нужно получить в Tabl2
QW--3----25
QW--3----43
RT---2----45
RT---2----37

А нумеровать что мне енто даст если к примеру у меня в Tabl1 записей 10000 а в Tabl2 записей 2000
25 ноя 05, 12:31    [2108213]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
А уникальный ключ для записей таблиц имеется?

и так, на всякий случай:

с надеждой, что в следующий раз не придется писать это самому:

скрипт на создание таблиц:

declare @t1 (id1 varchar(2), id2 int, id3 int)
insert @t1
select 'QW',3,25
union all
select 'TR',8,75
union all
select 'QW',3,43
union all
select 'RT',2,45
union all
select 'RT',2,37
union all
select 'QR',12,47

declare @t2 (id1 varchar(2), id222 int, id333 int)
insert @t1
select 'QW',3,12
union all
select 'QW',3,32
union all
select 'RT',2,1
union all
select 'RT',2,35

надо в @t2 видеть:

id1 id222 id333
QW325
QW343
RT245
RT237
25 ноя 05, 13:08    [2108498]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
Shurgenz
А уникальный ключ для записей таблиц имеется?
Так он не только должен быть уникальным, но и определять порядок следования записей. Т.е. newid(), скажем, не подойдет.
25 ноя 05, 13:11    [2108526]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
table забыл вставить .;)
25 ноя 05, 13:13    [2108540]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Prolog
To Maxx
если уж по немецки, то Seine


..... в данном случае ошибаетесь;)
25 ноя 05, 13:52    [2108810]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
AndroN-RUS
Member

Откуда: Красноярск
Сообщений: 10358
Я кажется нашел решение моей проблемы
Но для полнова счастья мне нужно знать как удалить созданную колонку
Создаю ее:
ALTER TABLE Table1
ADD Kol int NULL
25 ноя 05, 16:01    [2109838]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
ALTER TABLE Table1 DROP COLUMN Kol
25 ноя 05, 16:04    [2109857]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Prolog -приношу свои извинения по поводу моего немецкого.
-------------------------------------
Jedem Das Seine
25 ноя 05, 16:58    [2110218]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
Maxx
Prolog -приношу свои извинения по поводу моего немецкого.
-------------------------------------
Jedem Das Seine
Уже заметил изменение в топике Что быстрее view или #Table
25 ноя 05, 17:03    [2110246]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
AndroN-RUS
Member

Откуда: Красноярск
Сообщений: 10358
Кому интерестно пишу ответ на мою задачу
Повторяю задание:
Скрипт на создание таблиц:
declare @t1 (id1 varchar(2), id2 int, id3 int)
insert @t1
select 'QW',3,25
union all
select 'TR',8,75
union all
select 'QW',3,43
union all
select 'RT',2,45
union all
select 'RT',2,37
union all
select 'QR',12,47

declare @t2 (id1 varchar(2), id222 int, id333 int)
insert @t1
select 'QW',3,12
union all
select 'QW',3,32
union all
select 'RT',2,1
union all
select 'RT',2,35
Есить две таблицы
Таблица t1:
id1id2id3
QW325
TR875
QW343
RT245
RT237
QR1247

И Таблица t2:
id1id222id333
QW312
QW332
RT21
RT235

Нужно получить в таблице t2
id1id222id333
QW325
QW343
RT245
RT237


РЕШЕНИЕ:
Создаем по одной колонки "Kol" в таблице t1 и t2
Alter table t1 ADD Kol int Null
Alter table t2 ADD Kol int Null
Потом в таблице t1.Kol нумеруем все строки с 1 до конца
А в таблице t2.Kol Ставим значение большее чем всего строк в таблице t1:
declare @P int
set @P=0

update t1 set Kol=@P, @P=@P+1
set @P=@P+1
update t2 set Kol=@P
Получаем в таблице:
t1:
Kolid1id2id3
1QW325
2TR875
3QW343
4RT245
5RT237
6QR1247

t2:
Kolid1id222id333
7QW312
7QW332
7RT21
7RT235

После этого запускаем скрипт:
declare @P int
set @P=7
update tt2 set tt2.id333=tt1.id3,@P=tt1.Kol,tt2.Kol=tt1.Kol
from t2 tt2,t1 tt1
where (tt1.id1=tt2.id1) AND (tt2.id2=tt1.id222) AND (tt2.id333<>tt1.id3) AND (tt2.Kol>tt1.Kol) AND (tt1.Kol<@P)
После этого скрипта в таблицах стало
t1:
Kolid1id2id3
1QW325
2TR875
3QW343
4RT245
5RT237
6QR1247

t2:
Kolid1id222id333
1QW325
3QW343
4RT245
5RT237

А теперь удаляем наши дополнительные колонки:
Alter table t1 Drop Column Kol
Alter table t2 Drop Column Kol

Всем спосибо за внимание
С уважением AndroN-RUS
28 ноя 05, 06:02    [2114647]     Ответить | Цитировать Сообщить модератору
 Re: Профессионалы Помогите с update  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
более неопределенной формы хранения данных я не видел. Но наиболее всего поразил способ решения задачи. Смутно догадываюсь, что набор во вторй таблице напрямую зависит от набора в первой.

Так зачем делать какие-то апдейты, если достаточно простого select или select into?
28 ноя 05, 10:47    [2115246]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить