powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / update vs cross join
13 сообщений из 13, страница 1 из 1
update vs cross join
    #39738401
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql 12.0.5557.0 (X64)

Мне раньше не требовалось использовать cross join в update. Я думал, что поведение from одинаково в select и update. Оказалось не так. Можно ли хинтами или ещё как-то сделать update, чтобы from действовал как в select?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
begin	tran

create	table	#t1
(	f1	float )
insert	#t1	select	10
insert	#t1	select	20

create	table	#t2
(	f2	float )
insert	#t2	select	1
insert	#t2	select	2

select
	*
from
	#t1
	cross	join	#t2
select	@@RowCount		-- 4

update
	b
set
	f2=	f2+	f1
from
	#t1	a
	cross	join	#t2	b
select	@@RowCount		-- 2

select	*	from	#t1
select	*	from	#t2

rollback
...
Рейтинг: 0 / 0
update vs cross join
    #39738419
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOLUse caution when specifying the FROM clause to provide the criteria for the update operation. The results of an UPDATE statement are undefined if the statement includes a FROM clause that is not specified in such a way that only one value is available for each column occurrence that is updated, that is if the UPDATE statement is not deterministic .
Здравствуй, курсор?
...
Рейтинг: 0 / 0
update vs cross join
    #39738420
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
UPDATE #t1 SET f2=f2+(SELECT SUM(f1) FROM #t1)

Так?
...
Рейтинг: 0 / 0
update vs cross join
    #39738421
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap
Код: sql
1.
UPDATE #t1 SET f2=f2+(SELECT SUM(f1) FROM #t1)


Так?Или
Код: sql
1.
UPDATE #t1 SET f2+=(SELECT SUM(f1) FROM #t1)
...
Рейтинг: 0 / 0
update vs cross join
    #39738425
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я запутался с именами таблиц...
Код: sql
1.
UPDATE #t2 SET f2+=(SELECT SUM(f1) FROM #t1);

Заблудился в трёх соснах
...
Рейтинг: 0 / 0
update vs cross join
    #39738441
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapЧто-то я запутался с именами таблиц...
Код: sql
1.
UPDATE #t2 SET f2+=(SELECT SUM(f1) FROM #t1);

Заблудился в трёх соснах
В примере пройдёт. У меня более сложный случай с хитрыми CASE по обеим таблицам в SET.

Видимо, только курсор.
...
Рейтинг: 0 / 0
update vs cross join
    #39738445
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknownВидимо, только курсорОй ли?

Однако, CROSS JOIN там, очевидно, недопустим.
Можно как-то связать таблицы? Или хотя бы пронумеровать записи и связать по номерам?
Иначе в UPDATE каждая строка присутствует несколько раз и результат становится непредсказуемым.
...
Рейтинг: 0 / 0
update vs cross join
    #39738456
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapМожно как-то связать таблицы? Или хотя бы пронумеровать записи и связать по номерам?
Иначе в UPDATE каждая строка присутствует несколько раз и результат становится непредсказуемым.Нужно то, что выглядит, как CROSS и работает, как CROSS. В одной из таблиц BLOB поле, участвующее в условии. Нумерация записей будет равносильна его многократной дупликации.
...
Рейтинг: 0 / 0
update vs cross join
    #39738466
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknowniapМожно как-то связать таблицы? Или хотя бы пронумеровать записи и связать по номерам?
Иначе в UPDATE каждая строка присутствует несколько раз и результат становится непредсказуемым.Нужно то, что выглядит, как CROSS и работает, как CROSS. В одной из таблиц BLOB поле, участвующее в условии. Нумерация записей будет равносильна его многократной дупликации.Невозможно обсуждать то, что видите только вы.tunknownУ меня более сложный случай с хитрыми CASE по обеим таблицам в SET.
...
Рейтинг: 0 / 0
update vs cross join
    #39738469
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknownНужно то, что выглядит, как CROSS и работает, как CROSS. В одной из таблиц BLOB поле, участвующее в условии. Нумерация записей будет равносильна его многократной дупликации.
покажите нужный результат апдейта для вашего примера, какой должна быть на выходе таблица #t1?
...
Рейтинг: 0 / 0
update vs cross join
    #39738489
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakillпокажите нужный результат апдейта для вашего примера, какой должна быть на выходе таблица #t1?
Я привёл более простой пример, нужно более сложное условие
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create	table	#t1
(	word	varchar ( 256 ) )
insert	#t1	( word )	values	( '01' ),( '02' ),( '03' )

create	table	#t2
(	txt	varchar ( max )
	,list	varchar ( max ) )
insert	#t2	( txt )	values	( 'q 01 w 02 e 03 r 03 t' ),( 'a 01 b' ),( 'c 04 d' )


Получить нужно таблицу

Код: plaintext
1.
2.
3.
4.
txt                     list
---------------------   -----
q 01 w 02 e 03 r 03 t   01 02 03
a 01 b                  01
c 04 d                  NULL
...
Рейтинг: 0 / 0
update vs cross join
    #39738520
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknownПолучить нужно таблицу

Код: plaintext
1.
2.
3.
4.
txt                     list
---------------------   -----
q 01 w 02 e 03 r 03 t   01 02 03
a 01 b                  01
c 04 d                  NULL
Код: sql
1.
2.
3.
4.
5.
6.
update t
 set
  list = rtrim(s.x.value('.', 'varchar(max)'))
from
 #t2 t outer apply
 (select word + ' ' from #t1 where t.txt like '% ' + word + ' %' for xml path(''), type) s(x);
...
Рейтинг: 0 / 0
update vs cross join
    #39738534
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmouter apply
Точно. Благодарю за идею.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / update vs cross join
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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