update-SQL 根据表A的数据修改表B,当一条表B的数据匹配到多条表A的数据时选其中一条修改

问题描述

SQL 根据表A的数据修改表B,当一条表B的数据匹配到多条表A的数据时选其中一条修改
 update B
set _flg = 'update',
b_string1 = t4.a_string1,
b_string2 = t4.a_string2,
b_string3 = t4.a_string3,
b_string4 = t4.a_string4,
b_string5 = t4.a_string5,
update_by = current_user,
update_date = getdate()
from B t3
inner join A t4
on t3.id = t4.id and t3.no = t4.no
where exists
(
    select 1 from A t5 where t5.id + ',' +t5.no = t3.id + ',' + t3.no
    and (
            t3.b_string1 <> t5.a_string1
            or t3.b_string2 <> t5.a_string2
            or t3.b_string3 <> t5.a_string3
            or t3.b_string4 <> t5.a_string4
            or t3.b_string5 <> t5.a_string5
        )
)

当id 和 no 相同的情况下,A数据出现两条或者多条,怎么选择其中的一条来修改,代码应该怎么写? 求大神指点

解决方案

SQL A表数据更新到B表
从B表中检索数据,和A表匹配。。根据别人的问题写的。带注释
一张表中有两条(或多条)一样的数据,要删除其中的一条数据怎么操作?

解决方案二:

通过id和no组合分组,ROW_NUMBER()over (partition by id+','+no ) rn先对A表进行行编号,条件多加一个 rn=1

 update B
set _flg = 'update',
b_string1 = t4.a_string1,
b_string2 = t4.a_string2,
b_string3 = t4.a_string3,
b_string4 = t4.a_string4,
b_string5 = t4.a_string5,
update_by = current_user,
update_date = getdate()
from B t3
inner join (select a.*,ROW_NUMBER()over (partition by id+','+no ) rn from a)  t4
on t3.id = t4.id and t3.no = t4.no
where exists
(
    select 1 from A t5 where t5.id + ',' +t5.no = t3.id + ',' + t3.no
    and (
            t3.b_string1 <> t5.a_string1
            or t3.b_string2 <> t5.a_string2
            or t3.b_string3 <> t5.a_string3
            or t3.b_string4 <> t5.a_string4
            or t3.b_string5 <> t5.a_string5
        )
) and t4.rn=1
没有建表语句和数据,SQL没有调测,只是这么一个意思。

解决方案三:

mysql 数据库select 1 from A t5 where t5.id + ',' +t5.no = t3.id + ',' + t3.no 最后加limit 0,1
oracle数据库 select * from A t5 where t5.id + ',' +t5.no = t3.id + ',' + t3.no 把这怎么查询A表的语句当成子查询 select * from (子查询) WHERE ROWNUM<=1
sqlserver数据库 select top 10 * from A t5 where t5.id + ',' +t5.no = t3.id + ',' + t3.no

时间: 2024-08-30 14:15:04

update-SQL 根据表A的数据修改表B,当一条表B的数据匹配到多条表A的数据时选其中一条修改的相关文章

sql优化-请问这里的update sql怎么优化,数据比较多的时候

问题描述 请问这里的update sql怎么优化,数据比较多的时候 update cbs_contractlife set back_date =to_date('2014-11-17','yyyy-mm-dd') where policy_code ='6663131080120140003518' and status ='1'; update cbs_receiptinfo set back_date = to_date('2015-10-13','yyyy-mm-dd') where p

sql语句-如何用SQL语句实现两张表(无关联)查询后,分别将各自的一个字段,插入一个新表。

问题描述 如何用SQL语句实现两张表(无关联)查询后,分别将各自的一个字段,插入一个新表. 有A.B.C三张表如下, 表 A 表B 学生ID(主键) 学生名称 课程ID(主键)| 课程名称 表 C 学生ID 课程ID (联合主键) 那么,通过SQL语句操作如何用学生姓名和课程名(只能获取学生姓名和课程名)将课程ID和学生ID插入到C表(C表中有课程ID和学生ID并且是联合主键),感激不尽. 解决方案 你可以定义2个变量,分别从表A表B用名称查询到ID.在表C的新增语句中使用这2个变量. 不过你这

sql server 2008 r2-创建一个ETL包的时候,出现数据不匹配的问题怎么办,无论如何改数据都是出现数据类型不匹配

问题描述 创建一个ETL包的时候,出现数据不匹配的问题怎么办,无论如何改数据都是出现数据类型不匹配

如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

问题描述 回发或回调参数无效.在配置中使用<pagesenableEventValidation="true"/>或在页面中使用<%@PageEnableEventValidation="true"%>启用了事件验证.出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件.如果数据有效并且是预期的,则使用ClientScriptManager.RegisterForEventValidation方法来注册回发或回调

app-ios发布时,如何自己修改发布的APP的兼容性那一栏的信息啊?

问题描述 ios发布时,如何自己修改发布的APP的兼容性那一栏的信息啊? 我在发布的ITunes Connect上没找到那个选项啊,还有那个手动发布的选项有什么用? 解决方案 手动发布是你可以先提交审核, 审核过了不会上App Store 要你自己去点确认上架才行 解决方案二: 提供对应尺寸截图就可以了

easyui-Easyui 的datagrid 用appendRow加数据时200多条用了40多秒?有人能解决吗?

问题描述 Easyui 的datagrid 用appendRow加数据时200多条用了40多秒?有人能解决吗? Easyui 的datagrid 用appendRow加数据时200多条用了40多秒?效率超低....有人能解决吗? 解决方案 html 和数据文件json提供下,才好做调试 解决方案二: http://www.tc5u.com/webdev/833906.htm

《Effective Debugging:软件和系统调试的66个有效方法》一第13条:使自己尽可能多地观察到与调试有关的数据

第13条:使自己尽可能多地观察到与调试有关的数据 我们在调试的过程中要处理大量数据,并且要把各式各样的数据关联起来,如源代码.日志文件中的条目.变量的值.栈的内容.程序的I/O以及测试的结果等.这些数据通常是由多个处理流程与计算主机所产生的,如果能够把它们全都适当地展示在调试者眼前,那么将会给调试工作带来很多的好处.首先,可以使我们发现数据之间的相互关系.例如,我们可以看到:当测试失败的时候,日志文件中会多出来一条记录.其次,它可以令人尽量保持专注,避免因为来回切换而使思路受到干扰.有时我们必须

《Effective Debugging:软件和系统调试的66个有效方法》——第13条:使自己尽可能多地观察到与调试有关的数据

第13条:使自己尽可能多地观察到与调试有关的数据 我们在调试的过程中要处理大量数据,并且要把各式各样的数据关联起来,如源代码.日志文件中的条目.变量的值.栈的内容.程序的I/O以及测试的结果等.这些数据通常是由多个处理流程与计算主机所产生的,如果能够把它们全都适当地展示在调试者眼前,那么将会给调试工作带来很多的好处.首先,可以使我们发现数据之间的相互关系.例如,我们可以看到:当测试失败的时候,日志文件中会多出来一条记录.其次,它可以令人尽量保持专注,避免因为来回切换而使思路受到干扰.有时我们必须

如何从一个以文本文件(存放的数据列之间以空格分开,行之间以回车分开)中读取全部列的数据,之后存放在数库中

问题描述 如何从一个以文本文件(存放的数据列之间以空格分开,行之间以回车分开)中读取全部列的数据,之后存放在数库中,请高手指教,谢谢!!!!