SQL连接后更新列

时间:2014-01-22 19:50:06

标签: sql sql-server-2008 sql-update right-join

我正在使用Select和Right Join SQL函数将所有数据调用到一个表中。只有在Assignment表上的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%'

3 个答案:

答案 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';

答案 1 :(得分:0)

SQL Server joinupdate的语法是:

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的字段进行过滤。

答案 2 :(得分: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%'