我正在尝试在SQL Server中进行更新。我有一个有50个用户的临时表。该表包含PenWidth
和日期。我想基于临时表的personalid
更新主表日期,临时表中的日期。主表有3000多个用户。
逻辑是在临时表和主表中存在personalid
时使用临时表中的日期更新主表中的用户日期(每个用户不同)。
查询总是返回太多记录的子查询错误,并尝试更新主表中的所有记录。
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
我尝试过使用游标,其中和for循环和FETCH等:
personalid
答案 0 :(得分:2)
如果失败:
UPDATE m
SET MainTable_Date = t.[Date]
FROM MainTable AS m
INNER JOIN TempTable AS t ON m.personal_id = t.PersonalId
这意味着表格上没有一对一的关系。
用于检查运行:
SELECT
m.personal_id,
t.PersonalId
FROM MainTable AS m
LEFT JOIN TempTable AS t ON m.personal_id = t.PersonalId
ORDER BY M.personal_id, t.PersonalId
答案 1 :(得分:1)
问题是我们真的不知道这部分SQL查询的背后是什么。
SELECT
t.Date
FROM
TempTable t
INNER JOIN
MainTable m ON t.PersonalId = m.personalid
WHERE
t.PersonalId = m.personalid
当您尝试将其设置为MainTable_Date
时,此部分查询似乎会为您提供多个值。您必须为查询提供更多详细信息才能获得一个值。也许您应该使用MAX(..)
值或尝试汇总数据。
答案 2 :(得分:1)
此查询将满足您的需要我认为
CREATE TABLE MainTable
(
Personal_id int,
[MainTable_Date] date
)
CREATE TABLE #TempTable
(
Personalid int,
[Date] date
)
INSERT INTO MainTable
VALUES(1,'20120202'),(2,'20130202'),(3,'20150202'),(4,'20150206')
INSERT INTO #TempTable
VALUES(1,'20120203'),(2,'20130311'),(3,'20100202')
SELECT * FROM MainTable
SELECT * FROM #TempTable
UPDATE MainTable
SET MainTable_Date=(SELECT [DATE] FROM #TempTable AS T WHERE T.Personalid=M.Personal_id)
FROM MainTable AS M
WHERE M.Personal_id IN (SELECT Personalid FROM #TempTable)
SELECT * FROM MainTable
DROP TABLE MainTable
DROP TABLE #TempTable