【发布时间】:2012-12-06 11:32:17
【问题描述】:
我有以下设置:
表1:
latdouble
3
4
5
1
6
2
6
9
表2:
time latdouble(type double) latvarchar(type varchar)
2:00 3
3:00 4
4:00 5
5:00 1
6:00 6
7:00 2
8:00 6
9:00 9
Table1 中的 latdouble 基本上是正确的顺序,我想将这些值原样复制到 Table2 中,结果应该是:
表2:
time latdouble(type double) latvarchar(type varchar)
2:00 3 3
3:00 4 4
4:00 5 5
5:00 1 1
6:00 6 6
7:00 2 2
8:00 6 6
9:00 9 9
据我所知,我需要使用类似于以下的命令:
update Table2 set latdouble = (select latdouble from Table1)
但是我收到以下错误:
ERROR: more than one row returned by a subquery used as an expression
我确定有一个简单的解决方法,但我想不通,
谢谢, 詹姆斯
更新:让我解释一下这是怎么发生的。表 2 最初看起来像:
表2:
time latvarchar(type varchar)
2:00 3
3:00 4
4:00 5
5:00 1
6:00 6
7:00 2
8:00 6
9:00 9
我在 Table2 中添加了 latdouble(type double) 列。
然后我创建了一个名为 Table1 的新表,其中包含一个名为 latdouble(type double) 的列。我使用以下命令从 Table2 中转换 latvarchar 并将其复制到 Table1 中:
insert into Table1 (latdouble) select cast(latvarchar as double precision) from Table2
现在我想将值从 Table1 latdouble 复制回 Table2 latdouble。我这样做的原因是将 latvarchar 中的值转换为 double 并将它们保存在 latdouble 中,而不必创建整个 Table2 的临时副本,因为它是一个带有几个索引的非常大的表。
【问题讨论】:
-
Table1 是否有可排序的主键?如果不是,那么您看到的“订单”只是引擎方面的便利。没有什么可以阻止它在以后的查询中以任何随机顺序显示它...向 Table1 添加并填充一些列以指示您想要的排序顺序,此时将有可能找到解决方案。
-
不,它没有主键,但请你看看我添加的更新,它解释了这种情况是如何发生的。我选择创建 Table1 的方法是否意味着“订单”不仅仅是方便?
-
没有主键的表是(接近)没有意义的。
-
它应该是一个临时表,因此我没有看到需要任何键,但显然如果我添加一个主键,我可以使用它将数据复制到基于表 1在钥匙上。
标签: sql sql-update