用一个表字段值更新另一个表字段值

本文介绍如何使用Oracle和SQL Server中的子查询来更新表中的多个字段,包括不同表间字段的同步更新方法。通过实例展示了复杂的数据同步场景下,如何确保更新操作的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类型一:
Oracle:
另一个表的字段更新该表字段
例一、
update chgtab set ( chgtab.bm, chgtab.ks ) = ( select cl.pk_doc, cl.pk_cumdoc from alterprovider cl where chgtab.fb_oid = cl.oid ) where ( chgtab.fb_oid ) in ( select cl.oid from alterprovider cl )

UPDATE chgtab SET coutcurrtype = (SELECT tmp.coutcurrtype  FROM (SELECT DISTINCT h.chgtabtid, h.coutcurrtype  FROM chgtab h INNER JOIN  chgtab_b b ON h.chgtabtid = b.chgtabtid where b.coutcurrtype is not null ) tmp  WHERE chgtab.chgtabtid = tmp.chgtabtid)

例二、
UPDATE chgtab_bb
SET (chgtab_bb.nprice , chgtab_bb.nnotaxprice  ,
      chgtab_bb.nnotaxmny  , chgtab_bb.nmny  ,
      chgtab_bb.ntaxmny  ,
      chgtab_bb.cnexttypecode ,
      chgtab_bb.vnextcode , chgtab_bb.cnextid,
      chgtab_bb.cnextbid2  , chgtab_bb.cnextbid ,
      chgtab_bb.cnexttypecode2,
      chgtab_bb.vnextcode2, chgtab_bb.cnextid2,
      chgtab_bb.vnextrowno,
      chgtab_bb.vnextrowno2, chgtab_bb.ndiscount,
      chgtab_bb.crowno  )=(select
   b.nprice,b.nnotaxprice,b.nnotaxmoney,b.nmoney,b.ntaxmny,b.cnexttypecode,b.vnextcode,b.cnextid,
   b.cnextbid2,b.cnextbid,b.cnexttypecode2,b.vnextcode2,b.cnextid2,b.vnextrowno,b.vnextrowno2,100,'1'
FROM chgtab_b b
WHERE b.chgtabt_bid = chgtab_bb.chgtabt_bid)

例三、
update chgtabtmp_bb set (cupcalbodyid,cupwarehouseid)=(select cupcalbodyid,cupwarehouseid from
chgtab_bb bb2 where chgtabtmp_bb.chgtabt_bid=bb2.chgtabt_bid and chgtabtmp_bb.cupcorpid=bb2.cupcorpid)
where chgtabt_bid||cupcorpid in (select chgtabt_bid||cupcorpid from chgtab_bb where dr=0)

特别注意:子查询中的条件必须和外部的条件相同(或者外部条件必须比子查询条件限制严格),否则会更新错误

 

SQLServer:

UPDATE chgtab_bb
SET chgtab_bb.nprice = b.nprice, chgtab_bb.nnotaxprice = b.nnotaxprice,
      chgtab_bb.nnotaxmny = b.nnotaxmoney, chgtab_bb.nmny = b.nmoney,
      chgtab_bb.ntaxmny = b.ntaxmny,
      chgtab_bb.cnexttypecode = b.cnexttypecode,
      chgtab_bb.vnextcode = b.vnextcode, chgtab_bb.cnextid = b.cnextid,
      chgtab_bb.cnextbid2 = b.cnextbid2, chgtab_bb.cnextbid = b.cnextbid,
      chgtab_bb.cnexttypecode2 = b.cnexttypecode2,
      chgtab_bb.vnextcode2 = b.vnextcode2, chgtab_bb.cnextid2 = b.cnextid2,
      chgtab_bb.vnextrowno = b.vnextrowno,
      chgtab_bb.vnextrowno2 = b.vnextrowno2, chgtab_bb.ndiscount = 100,
      chgtab_bb.crowno = '1'
FROM chgtab_b b
WHERE b.chgtabt_bid = chgtab_bb.chgtabt_bid


要将一个的模糊字段一个字段关联,通常需要使用SQL语句中的JOIN操作来实现。这里提供一个基于SQL的通用方法,以实现两个之间的关联查询,尤其适用于字段不完全匹配的情况: 1. 使用LIKE操作符进行模糊匹配。如果你想要关联的字段一个文本字段,并且你希望基于某个模式进行匹配,可以在WHERE子句中使用LIKE操作符。 ```sql SELECT * FROM Table1 JOIN Table2 ON Table1.FuzzyColumn LIKE CONCAT('%', Table2.ExactColumn, '%'); ``` 在这个例子中,`Table1.FuzzyColumn`是含有模糊数据字段,而`Table2.ExactColumn`是一个中你想要匹配的精确字段。CONCAT函数用于构造包含通配符的LIKE查询,`%`是SQL中的通配符,示任意字符串。 2. 使用正则达式。在某些数据库系统中,如MySQL,你可以使用REGEXP或者RLIKE操作符来进行正则达式匹配,以实现更复杂的模糊匹配。 ```sql SELECT * FROM Table1 JOIN Table2 ON Table1.FuzzyColumn REGEXP CONCAT('.*', Table2.ExactColumn, '.*'); ``` 这个例子使用了正则达式来实现模糊匹配,其中`.*`示任意数量的任意字符。 3. 使用全文搜索。如果涉及的是大量文本数据匹配,一些数据库系统提供了全文搜索功能,如MySQL的FULLTEXT索引或PostgreSQL的全文搜索功能,它们可以提高对文本字段的搜索效率。 ```sql SELECT * FROM Table1 INNER JOIN Table2 ON MATCH(Table1.FuzzyColumn) AGAINST('+word' IN BOOLEAN MODE); ``` 在这个例子中,`MATCH()`和`AGAINST()`函数用于执行全文搜索。 请注意,上述方法在不同的数据库系统中可能会有所不同,需要根据你使用的具体数据库系统语法进行调整。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值