powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
23 сообщений из 23, страница 1 из 1
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104422
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте уважаемые, в общем такая проблемка есть 3 связанных таблицы table (id, name), table 2(id2, name2, nmtbl1), table 3(id3, name3, nmtbl2), поля связаны так: table(id) -> table 2(nmtbl1), table(id2) -> table 3(nmtbl2), надеюсь все понятно, если нет скажите - нарисую картинку. В общем задача такая, нужно изменить значение всех ячеек table 3(name3) значение которым соответствует значению table(name). пробовал сделать так:
Код: sql
1.
2.
3.
4.
UPDATE table 3 SET name3 = 'test' from table 3
inner join table 2 on table 3.nmtbl2 = table 2.id2
inner join table on table 2.nmtbl = table.id
WHERE table.name = 'что нибудь'


заполняется в каждом диапазоне ячеек только первая, остальные неизменные, не очень дружу с inner join, подскажите что не так? что то мне кажется как то коряво объяснил что нужно, ну как смог...
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104427
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лтвин
Здравствуйте уважаемые, в общем такая проблемка есть 3 связанных таблицы table (id, name), table 2(id2, name2, nmtbl1), table 3(id3, name3, nmtbl2), поля связаны так: table(id) -> table 2(nmtbl1), table(id2) -> table 3(nmtbl2), надеюсь все понятно, если нет скажите - нарисую картинку. В общем задача такая, нужно изменить значение всех ячеек table 3(name3) значение которым соответствует значению table(name). пробовал сделать так:
Код: sql
1.
2.
3.
4.
UPDATE table 3 SET name3 = 'test' from table 3
inner join table 2 on table 3.nmtbl2 = table 2.id2
inner join table on table 2.nmtbl = table.id
WHERE table.name = 'что нибудь'



заполняется в каждом диапазоне ячеек только первая, остальные неизменные, не очень дружу с inner join, подскажите что не так? что то мне кажется как то коряво объяснил что нужно, ну как смог...


Непонятно про какие вы диапазоны говорите, но ваш запрос должен обновить все записи в table 3, подходящие под условие.

Для понимания какие записи попадают под условие замените UPDATE table 3 SET name3 = 'test' на select *

Если не понятно, попробуйте набросать тестовый пример на # таблицах и на нем покажите, что вы хотели сделать

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create table #t1(...)
create table #t2(...)
create table #t3(...)

insert #t1(...)
values (...), (...) ...

insert #t2(...)
values (...), (...) ...

insert #t3(...)
values (...), (...) ...


update ...
...
--результат
select * from #t3
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104436
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я так и сделал, в table 3.name3 есть диапазон ячеек соответствующей одной ячейке table 2.name2, в table 2.name2 так же есть диапазон ячеек соответствующий одной ячейке table, в итоге получается что в table 3.name3 есть ряд диапазонов соответствующие ячейке table.name. запрос заполняет в каждом диапазоне только первую ячейку в table 3.name3, остальные ячейки всех диапазонов не меняются
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104453
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лтвин
я так и сделал

вот так?

msLex
замените UPDATE table 3 SET name3 = 'test' на select *



и результат запроса отличается от результатов апдейта?
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104456
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет, не отличается, в том то и дело, что то я с ними не правильно делаю, но вот что? сие для меня загадка, потому и прошу совета
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104462
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лтвин,

покажите на примере данных - что в ваших таблицах и что вы ожидаете увидеть после выполнения запроса.
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104468
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
приложил картинку, надеюсь будет понятно, мне нужно обновить все ячейки в table 3 которые имеют отношение определенной ячейке в table
блин, ну вторая table 2 это table 3, мозг уже подплавился, не заметил
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104471
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лтвин
нет, не отличается, в том то и дело, что то я с ними не правильно делаю, но вот что? сие для меня загадка, потому и прошу совета


Тогда только так, ибо понят, где там у вас на джойнах теряются записи без реальных данных не возможно

msLex
Если не понятно, попробуйте набросать тестовый пример на # таблицах и на нем покажите, что вы хотели сделать

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create table #t1(...)
create table #t2(...)
create table #t3(...)

insert #t1(...)
values (...), (...) ...

insert #t2(...)
values (...), (...) ...

insert #t3(...)
values (...), (...) ...


update ...
...
--результат
select * from #t3

...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104485
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,

мда, сегодня не успею скрипт составить, свет отключили ноут уже разряжен, завтра накидаю
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104661
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,
Код: 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.
33.
CREATE TABLE [dbo].[ВыборМодельСИ](
	[Код] [int] IDENTITY(1,1) NOT NULL,
	[модель СИ] [nvarchar](255) NULL,
	[модель сокр] [int] NULL,
	[стоимость поверки] [nvarchar](255) NULL,
 CONSTRAINT [ВыборМодельСИ$PrimaryKey] PRIMARY KEY CLUSTERED 
(
	[Код] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[ВыборМодельСокр](
	[Код] [int] IDENTITY(1,1) NOT NULL,
	[модель сокр] [nvarchar](255) NULL,
	[методика] [varchar](8000) NULL,
	[название СИ] [int] NULL,
 CONSTRAINT [ВыборМодельСокр$PrimaryKey] PRIMARY KEY CLUSTERED 
(
	[Код] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[ВыборНазваниеСИ](
	[Код] [int] IDENTITY(1,1) NOT NULL,
	[название СИ] [nvarchar](255) NULL,
	[тип СИ] [int] NULL,
 CONSTRAINT [ВыборНазваниеСИ$PrimaryKey] PRIMARY KEY CLUSTERED 
(
	[Код] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104663
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем настоящий запрос вот такой
Код: sql
1.
2.
3.
UPDATE [ВыборМодельСИ] SET [стоимость поверки] = '" + cena + "' from [ВыборМодельСИ] 
inner join [ВыборМодельСокр] on [ВыборМодельСИ].[модель сокр] = [ВыборМодельСокр].[Код] 
inner join [ВыборНазваниеСИ] on [ВыборМодельСокр].[название СИ] = [ВыборНазваниеСИ].[Код] WHERE [ВыборНазваниеСИ].[название СИ] ='" + value + "'
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104670
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лтвин,

вы пропустили саму важную часть


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
insert #t1(...)
values (...), (...) ...

insert #t2(...)
values (...), (...) ...

insert #t3(...)
values (...), (...) ...




без этого понять, что у вас "апдейтиться" и что вы ожидаете довольно сложно
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104703
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,
Извинюсь, запарился
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
INSERT INTO [dbo].[ВыборМодельСИ]
           ([модель СИ],[модель сокр])
     VALUES ('М2044', '1'), 
	 ('M2042','1'), 
	 ('M2040','1'), 
	 ('Э8033','2'), 
	 ('Э8035','2');


INSERT INTO [dbo].[ВыборМодельСокр]
           ([модель сокр]
           ,[название СИ])
     VALUES
           ('M20','1'), 
		   ('Э80','1'), 
		   ('Р33','2'), 
		   ('Р48','2');

INSERT INTO [dbo].[ВыборНазваниеСИ]
           ([название СИ]
           ,[тип СИ])
     VALUES
           ('вольтметр щитовой','1'), ('меры сопротивления','1');



в общем задача такая, в таблице "ВыборМодельСИ" есть столбец"стоимость поверки", мне нужно заполнить определенным значением все его ячейки имеющие отношение к ячейке в таблице "ВыборНазваниеСИ". Например если в таблице "ВыборНазваниеСИ" выбран "вольтметр щитовой" то поменять значения нужно в строках M2042, M2040, Э8033, Э8035
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104707
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот схема связи таблиц
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104724
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лтвин,

Приведите типы полей для полного счастья.

автор[ВыборМодельСИ].[модель сокр] = [ВыборМодельСокр].[Код] - у вас [код] и [модель сокр] одного типа ???
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104729
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL,

Конечно, связи по другому не сделать
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104734
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лтвин,

приведите скрипт с примером данных с КОДами, а то их нет и остается гадать что там за связь
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104739
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL,

Дак выше инсерты написал, они все коды вставляют какие должны быть в таблице
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104745
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лтвин
msLex,
Извинюсь, запарился
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
INSERT INTO [dbo].[ВыборМодельСИ]
           ([модель СИ],[модель сокр])
     VALUES ('М2044', '1'), 
	 ('M2042','1'), 
	 ('M2040','1'), 
	 ('Э8033','2'), 
	 ('Э8035','2');


INSERT INTO [dbo].[ВыборМодельСокр]
           ([модель сокр]
           ,[название СИ])
     VALUES
           ('M20','1'), 
		   ('Э80','1'), 
		   ('Р33','2'), 
		   ('Р48','2');

INSERT INTO [dbo].[ВыборНазваниеСИ]
           ([название СИ]
           ,[тип СИ])
     VALUES
           ('вольтметр щитовой','1'), ('меры сопротивления','1');




в общем задача такая, в таблице "ВыборМодельСИ" есть столбец"стоимость поверки", мне нужно заполнить определенным значением все его ячейки имеющие отношение к ячейке в таблице "ВыборНазваниеСИ". Например если в таблице "ВыборНазваниеСИ" выбран "вольтметр щитовой" то поменять значения нужно в строках M2042, M2040, Э8033, Э8035


вообще, под ваши условия попадают все данные из ВыборМодельСИ

ну и все аптейдится

Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
CREATE TABLE #ВыборМодельСИ(
	[Код] [int] IDENTITY(1,1) NOT NULL,
	[модель СИ] [nvarchar](255) NULL,
	[модель сокр] [int] NULL,
	[стоимость поверки] [nvarchar](255) NULL,
)
GO
CREATE TABLE #ВыборМодельСокр(
	[Код] [int] IDENTITY(1,1) NOT NULL,
	[модель сокр] [nvarchar](255) NULL,
	[методика] [varchar](8000) NULL,
	[название СИ] [int] NULL,
) 
GO

CREATE TABLE #ВыборНазваниеСИ(
	[Код] [int] IDENTITY(1,1) NOT NULL,
	[название СИ] [nvarchar](255) NULL,
	[тип СИ] [int] NULL,
)
GO



INSERT INTO #ВыборМодельСИ
           ([модель СИ],[модель сокр])
     VALUES ('М2044', '1'), 
	 ('M2042','1'), 
	 ('M2040','1'), 
	 ('Э8033','2'), 
	 ('Э8035','2');


INSERT INTO #ВыборМодельСокр
           ([модель сокр]
           ,[название СИ])
     VALUES
           ('M20','1'), 
		   ('Э80','1'), 
		   ('Р33','2'), 
		   ('Р48','2');

INSERT INTO #ВыборНазваниеСИ
           ([название СИ]
           ,[тип СИ])
     VALUES
           ('вольтметр щитовой','1'), ('меры сопротивления','1');


-- Исходные данные состояние
select *
from  #ВыборМодельСИ
select *
from  #ВыборМодельСокр

select *
from  #ВыборНазваниеСИ



-- Проверяем правильность условий join-ов
select *
from #ВыборНазваниеСИ t1
inner join #ВыборМодельСокр t2 on t1.Код = t2.[название СИ]
inner join #ВыборМодельСИ t3 on t2.Код = t3.[модель сокр]
where t1.[название СИ] = 'вольтметр щитовой'

--update 
update t3 set
	[стоимость поверки] = '100500'
from #ВыборНазваниеСИ t1
inner join #ВыборМодельСокр t2 on t1.Код = t2.[название СИ]
inner join #ВыборМодельСИ t3 on t2.Код = t3.[модель сокр]
where t1.[название СИ] = 'вольтметр щитовой'


-- Cостояние #ВыборМодельСИ после update
select *
from  #ВыборМодельСИ


drop table #ВыборМодельСИ
drop table #ВыборМодельСокр
drop table #ВыборНазваниеСИ
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104751
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,

Странно, а у меня почему такая беда?
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104752
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лтвин
Oleg_SQL,

Дак выше инсерты написал, они все коды вставляют какие должны быть в таблице


Пропустил скрипт с созданием...
А тригера нет на таблице?
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104755
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лтвин
msLex,

Странно, а у меня почему такая беда?

Если результат вашего селекта соответствует результату вашего апдетейта, то

1. У вас другие данные
2. У вас другой запрос
...
Рейтинг: 0 / 0
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
    #40104756
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg_SQL,

Да нет вроде..... сейчас нет возможности открыть базу, там просто три таблицы со связями 1:м и все, она просто была импортирована из acces
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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