SQL两表关联批量更新一列数据下面有数据参考
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL两表关联批量更新一列数据下面有数据参考相关的知识,希望对你有一定的参考价值。
我想批量更新一张表的数据,数据类型是这样的
A表 rlb_num,prod_id,line_num B表 rlb_num
A0001 C 01 1 A0001
A0001 C02 2 A0002
A0002 C01 3 A0003
A0002 C02 4
我想要的结果是把 A表里面的line_num批量更新为下面这种状态
A0001 C 01 1
A0001 C02 2
A0002 C01 1
A0002 C02 2
CREATE TABLE test(rlb_num VARCHAR(10),
prod_id VARCHAR(10),
line_num INT)
INSERT INTO dbo.test
( rlb_num, prod_id, line_num )
SELECT
'A0001','C01',1
UNION ALL
SELECT
'A0001','C02',2
UNION ALL
SELECT
'A0002','C01',3
UNION ALL
SELECT
'A0002','C02',4
--SELECT * FROM test
---sqlserver2005及以上版本
UPDATE t1 SET t1.line_num=t2.id
FROM test t1 INNER JOIN
(
SELECT ROW_NUMBER() OVER(PARTITION BY rlb_num ORDER BY prod_id) id,*
FROM test
) t2 ON t1.line_num=t2.line_num
----通用型
UPDATE t1 SET t1.line_num=t2.id
FROM test t1 INNER JOIN
(
SELECT *,(SELECT COUNT(1) FROM test WHERE rlb_num=a.rlb_num AND prod_id<=a.prod_id) AS id
FROM test a
) t2 ON t1.line_num=t2.line_num
-----结果:
A0001 C01 1
A0001 C02 2
A0002 C01 1
A0002 C02 2 参考技术B UPDATE [Table_2]
SET [Table_2].[line_num] = r
FROM [Table_2]
INNER JOIN ( SELECT * ,
rank() OVER ( PARTITION BY [rlb_num] ORDER BY [prod_id] ) AS r
FROM [Table_2]
) a ON [Table_2].[rlb_num] = a.[rlb_num]
AND [Table_2].[prod_id] = a.[prod_id] 参考技术C update tb set line_num=case prod_id when 'c01' then 1 else 2 end
操作前先select查询确保达到要求再执行追问
我A表数据不是只有C01 C02 有可能单号 A0001 有 C01,C02,C03,C04 没有规律性
追答update tb set line_num=convert(int,right(prod_id,2))--如果位数确定的话可以这样追问
对于上面这个问题我可能表达不是很清晰
我在新的问题做了补充 麻烦大家帮下我 谢谢
http://zhidao.baidu.com/question/571997180.html
上面是地址
谢谢
oracle 删除关联表数据
删除dept表中的数据:delete
from
dept
t
where
t.city
=
'shanghai'
删除与之关联的emp表中的数据:
delete
from
emp
e
where
e.deptno
in
(
select
t.deptno
from
dept
t
where
t.city
=
'shanghai'
)
删主键值之前,必须先删掉它的外键,这两条SQL的执行顺序楼主自己调一下。 参考技术A 设定dept表deptno列为主键。
alter
table
dept
add
constraint
pk_deptno
primary
key
(deptno);
在emp表deptno列上建立外键引用dept表deptno,指定外键类型为级联删除。
alter
table
emp
add
constraint
fk_deptno
foreign
key
(deptno)
references
dept(deptno)
on
delete
cascade;
这样删除dept表
只需:delete
from
dept
where
city='shanghai';
就可以自动删除对应emp表内容。
以上是关于SQL两表关联批量更新一列数据下面有数据参考的主要内容,如果未能解决你的问题,请参考以下文章
两个表,根据条件批量更新其中一个表的某一列数据。(高分求救,在线等待。)