Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / обновление значение в ячейке конечной связанной таблицы соответствующей значению первой / 23 сообщений из 23, страница 1 из 1
14.10.2021, 14:58
    #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
14.10.2021, 15:06
    #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
14.10.2021, 15:12
    #40104436
Лтвин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
я так и сделал, в table 3.name3 есть диапазон ячеек соответствующей одной ячейке table 2.name2, в table 2.name2 так же есть диапазон ячеек соответствующий одной ячейке table, в итоге получается что в table 3.name3 есть ряд диапазонов соответствующие ячейке table.name. запрос заполняет в каждом диапазоне только первую ячейку в table 3.name3, остальные ячейки всех диапазонов не меняются
...
Рейтинг: 0 / 0
14.10.2021, 15:31
    #40104453
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
Лтвин
я так и сделал

вот так?

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



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

покажите на примере данных - что в ваших таблицах и что вы ожидаете увидеть после выполнения запроса.
...
Рейтинг: 0 / 0
14.10.2021, 15:46
    #40104468
Лтвин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
Владислав Колосов,
приложил картинку, надеюсь будет понятно, мне нужно обновить все ячейки в table 3 которые имеют отношение определенной ячейке в table
блин, ну вторая table 2 это table 3, мозг уже подплавился, не заметил
...
Рейтинг: 0 / 0
14.10.2021, 15:50
    #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
14.10.2021, 16:14
    #40104485
Лтвин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
msLex,

мда, сегодня не успею скрипт составить, свет отключили ноут уже разряжен, завтра накидаю
...
Рейтинг: 0 / 0
15.10.2021, 10:53
    #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
15.10.2021, 10:58
    #40104663
Лтвин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
в общем настоящий запрос вот такой
Код: sql
1.
2.
3.
UPDATE [ВыборМодельСИ] SET [стоимость поверки] = '" + cena + "' from [ВыборМодельСИ] 
inner join [ВыборМодельСокр] on [ВыборМодельСИ].[модель сокр] = [ВыборМодельСокр].[Код] 
inner join [ВыборНазваниеСИ] on [ВыборМодельСокр].[название СИ] = [ВыборНазваниеСИ].[Код] WHERE [ВыборНазваниеСИ].[название СИ] ='" + value + "'
...
Рейтинг: 0 / 0
15.10.2021, 11:13
    #40104670
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
Лтвин,

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


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

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

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




без этого понять, что у вас "апдейтиться" и что вы ожидаете довольно сложно
...
Рейтинг: 0 / 0
15.10.2021, 12:42
    #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
15.10.2021, 12:48
    #40104707
Лтвин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
Вот схема связи таблиц
...
Рейтинг: 0 / 0
15.10.2021, 13:26
    #40104724
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
Лтвин,

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

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

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

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

Дак выше инсерты написал, они все коды вставляют какие должны быть в таблице
...
Рейтинг: 0 / 0
15.10.2021, 14:50
    #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
15.10.2021, 15:22
    #40104751
Лтвин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
обновление значение в ячейке конечной связанной таблицы соответствующей значению первой
msLex,

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

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


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

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

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

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

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


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