Chinaunix

标题: 江湖求急。谢谢各位大侠们!! [打印本页]

作者: arq    时间: 2009-05-13 00:32
标题: 江湖求急。谢谢各位大侠们!!
TEMP_1
A1   A2   A3   
--   --   --   
1              
2              
3              
4              
5              
6              

TEMP_2
A1   A2   A3   
--   --   --   
1    1         
1    2         
2    2         
3    1         
3    2         
4    3  

想用2里的A2列最小值更新到1里的A2列值。即想要1变成如下表
A1   A2   A3   
--   --   --   
1    1        
2    2         
3    1         
4    3         
5              
6              

请问这样的语句怎么写?
作者: arq    时间: 2009-05-13 00:39
麻烦各位大侠给支个招。在下十在是想不出来怎么弄了。最好是不要通过临时表来操作!!

谢谢!!!!!!!
作者: camham    时间: 2009-05-13 11:35
update t1 set t1.a2=min(t2.a2)
from t2
where t1.a1=t2.a1
作者: arq    时间: 2009-05-15 17:51
update t1 set t1.a2=min(t2.a2)
from t2
where t1.a1=t2.a1

不行啊。这样更新的结果全都是1了。
作者: yyt030    时间: 2009-05-17 02:19
select min(A2) as A2_min,A1 into #TEMP_03 from TEMP_02 group by A1;
update table TEMP_01  tb1
set tb1.A2=tb2.A2_min
from #TEMP_03  tb2
where tb2.A1=tb1.A1 ;
作者: arq    时间: 2009-05-17 12:09
谢谢.用过渡表是可以,现在就是想用一句话更新过来.
作者: yyt030    时间: 2009-05-17 16:55
select a.A1,b.A2,a.A3 from TEMP_01 a left join (select A1,min(A2) as A2 from  TEMP_02 group by A1 ) b on a.A1=b.A1;


这个应该能解决最终你的问题!
作者: yyt030    时间: 2009-05-17 19:01
也可以这样:

update TEMP_01 a,(select A1,min(A2) as A2 from  TEMP_02 group by A1) b
set a.A2=b.A2 where a.A1=b.A1;
作者: arq    时间: 2009-06-10 01:09
谢谢各位老大回贴。上面的语句在我的数据库里执行不了。
select a.A1,b.A2,a.A3 from TEMP_1 a left join (select A1,min(A2) as A2 from  TEMP_2 group by A1 ) b on a.A1=b.A1 执行这句话提示如下:
Incorrect syntax near the keyword 'select'.
Server Message:  Number  102, Severity  15
Server 'SYBASE', Line 1:
Incorrect syntax near ')'.


update TEMP_01 a,(select A1,min(A2) as A2 from  TEMP_02 group by A1) b set a.A2=b.A2 where a.A1=b.A1 执行这句提示如下:
Incorrect syntax near 'b'.
Server Message:  Number  102, Severity  15
Server 'SYBASE', Line 1:
Incorrect syntax near '='.

么办法了。我只能是通过过渡表来实现了。

再次感谢各位。谢谢。
作者: yyt030    时间: 2009-06-10 23:17
原帖由 arq 于 2009/6/10 01:09 发表
谢谢各位老大回贴。上面的语句在我的数据库里执行不了。
select a.A1,b.A2,a.A3 from TEMP_1 a left join (select A1,min(A2) as A2 from  TEMP_2 group by A1 ) b on a.A1=b.A1 执行这句话提示如下:
Incor ...


将第二条SQL即update语句换成如下:
update TEMP_01 a set a.A2=b.A2
from (select A1,min(A2) as A2 from  TEMP_02 group by A1) as b
where a.A1=b.A1;

再尝试一下,如果不行就能是数据库版本不支持这种语法了。
作者: 小水灵    时间: 2009-06-11 11:27
学习啦




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2