使用group by更新更新查询中的多个记录

时间:2016-05-04 05:27:30

标签: sql-server

我有两张桌子。 Table1有公司数据(Company ID, Company Name ...),因此每家公司都有单一记录。

Table2包含有关该公司各部门的信息(Department ID, Department Name, Company ID, Company Name ...)。因此,第二个表可能有n个记录,其中使用了相同的公司ID。

问题是我们的一个触发器无法正常工作,直到现在还没有人注意到。因此,当公司名称在Table1中更新时,它从未在Table2中反映出来。

要纠正此问题,我必须执行以下查询:

Update Table2 
Set 
    [Company Name] = (select [Company Name] 
                      from Table1 
                      where Table2.Company ID = Table1.Company ID)
Group By Table2.Company ID

基本上,我正在尝试更新Table2中的所有记录,以便为表1中的每条记录使用与Table1相同的名称。

我对如何创建内部select子句感到有点困惑。

P.S。对不起,这可能有点令人困惑。请告诉我如何最好地改写它。

2 个答案:

答案 0 :(得分:1)

不需要使用分组......

UPDATE     T2
SET        [Company Nane]   = T1.[Company Nane]
FROM       Table1 T1
INNER JOIN Table2 T2 
        ON T1.[Company ID] = T2.[Company ID]

答案 1 :(得分:0)

正如其他人所提到的:删除GROUP BY,您的查询就可以了。

GROUP BY用于在查询中生成结果行,该查询是其他行的聚合。例如。您的部门表中每个公司的一条记录,每个公司的部门最繁忙。您无法更新此类结果记录,因为该表中不存在该记录。您只能更新表记录。

请从查询中删除GROUP BY,然后直截了当。

Update DepartmentTable
Set [Company Name] = 
(
  select [Company Name] 
  from CompanyTable
  where CompanyTable.[Company ID] = DepartmentTable.[Company ID]
);