Я использую функции SQL Select и Right Join для вызова всех данных в одну таблицу. Вызываемые данные будут заполнены, только если ans_primary = '1' в таблице назначений. Если asn_primary = '1', он объединит все столбцы ниже на att_id = att_id для обеих таблиц.

Две используемые таблицы и столбцы приведены ниже:

Присвоение (att_id, itm_id, asn_primary)

Вложение (att_id, att_name, att_type, att_path, att_path2, att_path3)

select assignment.itm_id, attachment.att_name, attachment.att_type, attachment.att_path,    attachment.att_path2, attachment.att_path3
    from assignment
    right join attachment
    on assignment.att_id=attachment.att_id
    where assignment.asn_primary = '1'

Мне нужно иметь возможность обновить все поля в столбце att_name после того, как был сделан вызов. Я не уверен, как обновлять столбцы после использования вызова Join.

SQL, который мне нужно запустить после вызова / присоединения информации:

Update attachment
set att_name = att_name + '.tif'
where att_path3 like '%.tif%'
0
Matt Weick 22 Янв 2014 в 23:50

3 ответа

Лучший ответ

Синтаксис для join в update в SQL Server:

Update att
    set att_name = att_name + '.tif'
    from assignment a join
         attachment att
         on a.att_id = att.att_id
    where a.asn_primary = '1' and
          att.att_path3 like '%.tif%';

right outer join не кажется подходящим, потому что вы фильтруете поле из assignment.

0
Gordon Linoff 22 Янв 2014 в 19:54
UPDATE assignment
right join attachment
on assignment.att_id=attachment.att_id
SET att_name = att_name + '.tif'
where assignment.asn_primary = '1'
AND att_path3 like '%.tif%'
0
Jlil 22 Янв 2014 в 19:55

То, что вы ищете, называется побочным запросом. Вы захотите следовать базовой структуре, как показано ниже. Будьте осторожны с результатами. Если строка отображается три раза, она будет обновлена ​​три раза. Это может существенно повлиять на производительность сервера и итоговые журналы.

Обычно я вставляю «ВЫБРАТЬ *», чтобы я мог просмотреть результаты до выполнения каких-либо обновлений.

UPDATE T1
SET T1.Column1 = 'New Data'
--SELECT *
FROM dbo.Table1 AS T1
INNER JOIN dbo.Table2 AS T2 ON T2.Id = T1.Id
WHERE T1.Column1 <> 'New Data';
0
jtimperley 22 Янв 2014 в 19:54