我有一个表单,显示系统列表及其当前状态。用户可以更改状态,并将状态更改的日期存储在历史记录表中。用户还可以在状态更改时更改服务器的名称(例如,如果由于租赁滚动而更换系统)。
历史记录表按systemname
存储详细信息,因此如果表单上的系统名称发生更改,则还需要更新历史记录(以及所有历史更改)。在表单上,有一个名为originalsystemName
的隐藏字段,因此我们知道在保存表单时systemname
是否匹配。
<input type='text' name='systemname'>
<input type='text' name='originalSystemName'>
<input type='text' name='status'><input type='submit' type='submit'>
我想出了以下查询但是我收到了一个错误(请参阅下面的查询)。
update SysHistory set
SystemName = (
select distinct t.systemname
from systemInfo_tmp t, SysHistory h
where t.systemname != t.originalSystemName
)
where systemname in (
select distinct t1.originalSystemName
from systemInfo_tmp t1, SysHistory h1
where t1.systemname != t1.originalSystemName
)
我收到错误:
子查询返回的值超过1。当子查询遵循=,!=,&lt;,&lt; =,&gt;,&gt; =或子查询用作表达式时,不允许这样做。
答案 0 :(得分:5)
这可能是你的意思吗?虽然这是一行表,但似乎缺少WHERE
条款。
UPDATE h
SET SystemName = t.systemname
FROM SysHistory AS h
INNER JOIN systemInfo_tmp AS t
ON h.systemname <> t.originalSystemName;
答案 1 :(得分:2)
要使用其他表格中的值更新表格,可以使用join
轻松完成此操作。
在这种情况下,当sysHistory
包含与原始版本不匹配的systemInfo_tmp
时,systemInfo_tmp
表会加入systemName
表格,sysHistory
表格1}} systemName
匹配。
update sh
set systemName = t.systemName
from
sysHistory sh join
systemInfo_tmp t on
t.originalSystemName = sh.systemName
and t.originalSystemName != t.systemName