有两个字段
id weight
123-321-JY 20
123-321 30
123-321-JG 40
123-321-JY1 20
123-321-JY-20 50
要将带‘—JY’,‘-JG’ 类后缀的另外四种的weight 更新到与123-321一样id weight
123-321-JY 30
123-321 30
123-321-JG 30
123-321-JY1 30
123-321-JY-20 30最好一条sql实现sql.oracle报表数据库类
id weight
123-321-JY 20
123-321 30
123-321-JG 40
123-321-JY1 20
123-321-JY-20 50
要将带‘—JY’,‘-JG’ 类后缀的另外四种的weight 更新到与123-321一样id weight
123-321-JY 30
123-321 30
123-321-JG 30
123-321-JY1 30
123-321-JY-20 30最好一条sql实现sql.oracle报表数据库类
set a.weight =
(select distinct(b.weight) from table b where b.id='123-321')
where (a.id instr(a.id, '-GY') > 0 or a.id instr(a.id, '-JG') > 0)
没建表测试,
(
ID VARCHAR2(20),
weight NUMBER(2)
);ALTER TABLE t_test ADD PRIMARY KEY (ID);INSERT INTO t_test VALUES('123-321-JY', 20);
INSERT INTO t_test VALUES('123-321', 30);
INSERT INTO t_test VALUES('123-321-JG', 40);
INSERT INTO t_test VALUES('123-321-JY1', 20);
INSERT INTO t_test VALUES('123-321-JY-20', 50);COMMIT;SELECT * FROM t_test;UPDATE t_test SET weight = (SELECT weight FROM t_test WHERE ID = '123-321') WHERE ID LIKE '%-J%';
且后面的后缀并不一定是以‘J’开头,可能应该是【A-Z】间的,后缀长度也不一定的
SQL> exec :id:='123-321';
PL/SQL procedure successfully completed
id
---------
123-321
SQL> UPDATE t_test SET weight = (SELECT weight FROM t_test WHERE ID = :id) WHERE id like :id||'-%';
4 rows updated
id
---------
123-321
SQL> select * from t_test;
ID WEIGHT
-------------------- ------
123-321-JY 30
123-321 30
123-321-JG 30
123-321-JY1 30
123-321-JY-20 30
不好意思 可鞥是我开始的提问没有说清楚 在表中 你并不能简单的认定谁是那个ID,我自己开始的想法是先把表中带的后缀都截掉后放入一个临时表(不是后缀的临时表) 并根据源表更新临时表的weight值 但是现在我没法将weight更新到源表,而且我的思路貌似有些繁琐 所以想请教一下各位高人