有问题需要解决 - 子查询返回的值超过1

时间:2014-09-29 20:05:06

标签: sql sql-server

我有一个需要更新的庞大表格。

以下表为例。我想使用patternid 1更新所有patternID 2。 但是,当我尝试使用子查询>我收到错误"子查询返回的值超过1"

使用查询

update Testtable 
set triggertime = (select triggertime from testtable where patternid = 1 )
where patternid = 2

请帮忙

以下是测试表

PatternID   triggertime ro_no
1   00:30       101
2   00:45       101
3   01:00       101
1   00:30       102
2   00:50       102
3   01:00       102
1   00:30       103
2   00:51       103
3   01:00       103
1   00:30       105
2   00:52       105
3   01:00       105
1   00:30       104
2   00:53       104
3   01:00       104
1   00:30       106
2   00:54       106
3   01:00       106

2 个答案:

答案 0 :(得分:2)

正如它所说,有多个paternnid = 1行。你想用哪一个?也许最大的一个?

试试这个:

update Testtable 
set triggertime = (select max(triggertime) from testtable where patternid = 1 )
where patternid = 2

修改

根据您的新说明:

update Testtable 
set triggertime = (select max(innerTable.triggertime) from testtable innerTable where innertable.patternid = 1 and innerTable.ro_no = outerTable.ro_no )
from Testtable outerTable
where patternid = 2;

请参阅:

http://sqlfiddle.com/#!3/ede5a/1

答案 1 :(得分:1)

以下是您正在寻找的查询:

UPDATE testtable 
SET triggertime = (SELECT TOP 1 T2.triggertime
                   FROM testtable T2
                   WHERE T2.patternid = 1
                        AND T2.ro_no = T.ro_no
                   ORDER BY T2.triggertime DESC)
FROM testtable T
WHERE patternid = 2

希望这会有所帮助。