现在要把c2列赋到c1列中,批量修改c1列,按main字段查询。不知道该如何写SQL语句!!
8 个解决方案
#1
update table1 set c1=(select c2 from table2 where c1.main=c2.main);
#2
bzszp(SongZip)
你的“ where c1.main=c2.main);”写法有问题吧~
我用“update table1 set c1=(select c2 from table2,table1 where table1.main=table2.main);”这样的SQL语句,提示错误:单行子查询返回多于一个行!
你的“ where c1.main=c2.main);”写法有问题吧~
我用“update table1 set c1=(select c2 from table2,table1 where table1.main=table2.main);”这样的SQL语句,提示错误:单行子查询返回多于一个行!
#3
c1和c2之间的数据必须为1:1的关系,不然没法确定更新的值
#4
我这样写:
update table1 set tabel1.c1=table2.c2 where table1.main=table2.main;
但是总是在“table2.main”上提示“ORA-00904: 无效列名”!
table2.main这列是明明有的啊!!!
update table1 set tabel1.c1=table2.c2 where table1.main=table2.main;
但是总是在“table2.main”上提示“ORA-00904: 无效列名”!
table2.main这列是明明有的啊!!!
#5
写个PL/SQL过程吧。。。。
一条一条的修改就和了嘛。
一条一条的修改就和了嘛。
#6
update table1 set tabel1.c1=(select table2.c2 from table2 where table1.main=table2.main);
#7
稍许麻烦一点,写了个PL/SQL过程。
稍加修改,还可以扩展到多列的赋值。
-----------------------------------------------
DECLARE
v_MAIN TABLE2.MAIN%TYPE;
v_C2 TABLE2.C2%TYPE;
CURSOR c_TABLE2 IS
SELECT MAIN, C2
FROM TABLE2;
BEGIN
OPEN c_TABLE2;
LOOP
FETCH c_TABLE2 INTO v_MAIN, v_C2;
UPDATE TABLE1
SET C1= v_C2
WHERE MAIN= v_MAIN;
EXIT WHEN c_TABLE2%NOTFOUND;
END LOOP;
CLOSE c_TABLE2;
END;
/
-----------------------------------------------
稍加修改,还可以扩展到多列的赋值。
-----------------------------------------------
DECLARE
v_MAIN TABLE2.MAIN%TYPE;
v_C2 TABLE2.C2%TYPE;
CURSOR c_TABLE2 IS
SELECT MAIN, C2
FROM TABLE2;
BEGIN
OPEN c_TABLE2;
LOOP
FETCH c_TABLE2 INTO v_MAIN, v_C2;
UPDATE TABLE1
SET C1= v_C2
WHERE MAIN= v_MAIN;
EXIT WHEN c_TABLE2%NOTFOUND;
END LOOP;
CLOSE c_TABLE2;
END;
/
-----------------------------------------------
#8
可以用sql生成sql办法,在sqlplus中
假设将table_b.col2值赋给table_a.col3
select 'update table_A set col3='||table_b.col2||'where talbe_A.col1='||table_b.col1
from table_a,table_b
where table_a.col1=table_b.col1
table_a 和table_b通过col1关联.
执行生成的肢本
假设将table_b.col2值赋给table_a.col3
select 'update table_A set col3='||table_b.col2||'where talbe_A.col1='||table_b.col1
from table_a,table_b
where table_a.col1=table_b.col1
table_a 和table_b通过col1关联.
执行生成的肢本
#1
update table1 set c1=(select c2 from table2 where c1.main=c2.main);
#2
bzszp(SongZip)
你的“ where c1.main=c2.main);”写法有问题吧~
我用“update table1 set c1=(select c2 from table2,table1 where table1.main=table2.main);”这样的SQL语句,提示错误:单行子查询返回多于一个行!
你的“ where c1.main=c2.main);”写法有问题吧~
我用“update table1 set c1=(select c2 from table2,table1 where table1.main=table2.main);”这样的SQL语句,提示错误:单行子查询返回多于一个行!
#3
c1和c2之间的数据必须为1:1的关系,不然没法确定更新的值
#4
我这样写:
update table1 set tabel1.c1=table2.c2 where table1.main=table2.main;
但是总是在“table2.main”上提示“ORA-00904: 无效列名”!
table2.main这列是明明有的啊!!!
update table1 set tabel1.c1=table2.c2 where table1.main=table2.main;
但是总是在“table2.main”上提示“ORA-00904: 无效列名”!
table2.main这列是明明有的啊!!!
#5
写个PL/SQL过程吧。。。。
一条一条的修改就和了嘛。
一条一条的修改就和了嘛。
#6
update table1 set tabel1.c1=(select table2.c2 from table2 where table1.main=table2.main);
#7
稍许麻烦一点,写了个PL/SQL过程。
稍加修改,还可以扩展到多列的赋值。
-----------------------------------------------
DECLARE
v_MAIN TABLE2.MAIN%TYPE;
v_C2 TABLE2.C2%TYPE;
CURSOR c_TABLE2 IS
SELECT MAIN, C2
FROM TABLE2;
BEGIN
OPEN c_TABLE2;
LOOP
FETCH c_TABLE2 INTO v_MAIN, v_C2;
UPDATE TABLE1
SET C1= v_C2
WHERE MAIN= v_MAIN;
EXIT WHEN c_TABLE2%NOTFOUND;
END LOOP;
CLOSE c_TABLE2;
END;
/
-----------------------------------------------
稍加修改,还可以扩展到多列的赋值。
-----------------------------------------------
DECLARE
v_MAIN TABLE2.MAIN%TYPE;
v_C2 TABLE2.C2%TYPE;
CURSOR c_TABLE2 IS
SELECT MAIN, C2
FROM TABLE2;
BEGIN
OPEN c_TABLE2;
LOOP
FETCH c_TABLE2 INTO v_MAIN, v_C2;
UPDATE TABLE1
SET C1= v_C2
WHERE MAIN= v_MAIN;
EXIT WHEN c_TABLE2%NOTFOUND;
END LOOP;
CLOSE c_TABLE2;
END;
/
-----------------------------------------------
#8
可以用sql生成sql办法,在sqlplus中
假设将table_b.col2值赋给table_a.col3
select 'update table_A set col3='||table_b.col2||'where talbe_A.col1='||table_b.col1
from table_a,table_b
where table_a.col1=table_b.col1
table_a 和table_b通过col1关联.
执行生成的肢本
假设将table_b.col2值赋给table_a.col3
select 'update table_A set col3='||table_b.col2||'where talbe_A.col1='||table_b.col1
from table_a,table_b
where table_a.col1=table_b.col1
table_a 和table_b通过col1关联.
执行生成的肢本