2014-01-22 2 views
0

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

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

Назначение (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

Синтаксис 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

Это работало как шарм. Я буду замечать для будущей ссылки, будущая, как она структурирована. Спасибо, Гордон! –

0

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

Обычно я вставляю 'SELECT *', чтобы просмотреть результаты до выполнения любых обновлений.

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

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

+0

Простота проверки базы данных в режиме полного восстановления. Обновляйте каждую запись в таблице с 1 миллионом записей в обоих направлениях. Вы должны увидеть, что результирующие журналы в три раза превышают размер одного обновления. – jtimperley

+0

Это работало отлично, как ответ Гордона ниже. Большое спасибо за отзывы @jtimperley! –

0
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%' 
Смежные вопросы