我有两张桌子。 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。对不起,这可能有点令人困惑。请告诉我如何最好地改写它。
答案 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]
);