sql 执行问题

问题描述

a表idtd1td21ab2cdb表idtd12td1td21ab2cd3abcb表的td12是td1和td2组成的先判断b表是不是a表组成的,如果是组成的我们就将a表的td1td2复制给b表的td1td2如果不是,我们就给他删除,这种sql应该怎么写呢??

解决方案

解决方案二:
不明白
解决方案三:
判断b表的td12是不是a表的td1和td2组成的
解决方案四:
你这个是不是要写成一个存储过程啊????单条sql太多了吧??
解决方案五:
给你提供一点思路你看看我这个。。。declare@str1nvarchar(20)set@str1=(selecttd1+td2fromt1whereid=1)declare@str2nvarchar(20)set@str2=(selecttd12fromt2whereid=1)declare@s1varchar(20)set@s1=(selecttd1fromt1whereid=1)declare@s2varchar(20)set@s2=(selecttd2fromt1whereid=1)if(@str1=@str2)beginupdatet2settd1=@s1,td2=@s2whereid=1end

解决方案六:
你要用的话那么你就要把id变成动态对比的。。。我这个是写死的。。。
解决方案七:
删除:deletefrombwhereb.idnotin(selectb.[id]froma,bwhereb.td12=(a.td1+a.td2))更新:updatebsetb.td1=a.td1,b.td2=a.td2from(selecta.td1,a.td2froma,bwhereb.td12=(a.td1+a.td2))awhereb.td12=(a.td1+a.td2)自己优化吧。。
解决方案八:
引用4楼lxl_sports的回复:

给你提供一点思路你看看我这个。。。SQLcodedeclare@str1nvarchar(20)set@str1=(selecttd1+td2fromt1whereid=1)declare@str2nvarchar(20)set@str2=(selecttd12fromt2whereid=1)declare@s1varchar(20)set@s1=(selecttd1fromt1whereid=1)declare@s2varchar(20)set@s2=(selecttd2fromt1whereid=1)if(@str1=@str2)beginupdatet2settd1=@s1,td2=@s2w…

我这样写呢?DELETEFROMODFROMdbo.t1asODJOINdbo.t2ASOD1ONOD.id=OD1.idWHEREOD.t1+OD.t2<>OD1.t12--删除了其他的直接更新就好了

解决方案:
引用4楼lxl_sports的回复:

给你提供一点思路你看看我这个。。。SQLcodedeclare@str1nvarchar(20)set@str1=(selecttd1+td2fromt1whereid=1)declare@str2nvarchar(20)set@str2=(selecttd12fromt2whereid=1)declare@s1varchar(20)set@s1=(selecttd1fromt1whereid=1)declare@s2varchar(20)set@s2=(selecttd2fromt1whereid=1)if(@str1=@str2)beginupdatet2settd1=@s1,td2=@s2w…

不用这么麻烦生成一个CTE就好了WITHFUCKAS(SELECTc1.t12asa,c.t1asb,c.t2asdFROMdbo.t1ascINNERJOINdbo.t2asc1ONc.id=c1.idWHEREc.t1+c.t2=c1.t12)UPDATEFUCKSETa=b+d
解决方案:
WITHFUCKAS(SELECTc1.t12asa,c.t1asb,c.t2asdFROMdbo.t1ascINNERJOINdbo.t2asc1ONc.id=c1.idWHEREc.t1+c.t2=c1.t12)UPDATEFUCKSETa=b+d

解决方案:
select*fromadd1,citywhereadd1.clike%city.city%这条语句有错吗服务器:消息170,级别15,状态1,行1第1行:'city'附近有语法错误。
解决方案:
引用10楼xwf111的回复:

select*fromadd1,citywhereadd1.clike%city.city%这条语句有错吗服务器:消息170,级别15,状态1,行1第1行:'city'附近有语法错误。

不知道LZ写的什么T-SQL看看我的这篇再看看你的语句什么错误http://www.cnblogs.com/bhtfg538/archive/2008/11/25/1341016.html
解决方案:
select*fromadd1,citywhereadd1.clike%city.city%这条语句有错吗查询city表所有与add1表数据匹配的add1c表中的有(city表种city一列的数据)包含就返回
解决方案:
在两个表中查询,应该加连接不能直接查询。

时间: 2024-09-21 17:16:38

sql 执行问题的相关文章

用jamon来监控你的sql执行效率

/** *作者:张荣华 *日期:2008-2-25 **/ 之前有一篇文章讲到如何使用jamon来监控请求以及方法得调用(原文地址见:[url]http://www.iteye.com/post/354575 [/url]),本文属于其姊妹篇,使用jamon监控系统的sql调用及其调用效率. 需求: 1我们知道在使用hibernate得时候,我们可以打开show sql选项,可以直接查看sql语句调用的情况,那么当我们使用其他持久技术的时候我们也需要这个功能怎么办呢,没有关系,jamon能够帮我

SQL教程:提高SQL执行效率的几点建议

提高SQL执行效率的几点建议: ◆尽量不要在where中包含子查询; 关于时间的查询,尽量不要写成:where to_char(dif_date,'yyyy-mm-dd')=to_char('2007-07-01','yyyy-mm-dd'); ◆在过滤条件中,可以过滤掉最大数量记录的条件必须放在where子句的末尾; FROM子句中写在最后的表(基础表,driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有三个以上的连接查询,

查看SQL执行计划常用方法

不论是做为开发DBA还是维护DBA,总是或多或少地遇到SQL执行效率或者说SQL调优问题,查看执行计划是必须的.一般我们可以用3种方法查看: 一.explain plan for 举例就足以说明其用法 sys@ORCL> explain plan for 2 select sysdate from dual; Explained. sys@ORCL> select * from table(dbms_xplan.display()); PLAN_TABLE_OUTPUT -----------

提高SQL执行效率的几点建议

提高SQL执行效率的几点建议: 尽量不要在where中包含子查询; 关于时间的查询,尽量不要写成:where to_char(dif_date,'yyyy-mm-dd')=to_char('2007-07-01','yyyy-mm-dd'); 在过滤条件中,可以过滤掉最大数量记录的条件必须放在where子句的末尾; FROM子句中写在最后的表(基础表,driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有三个以上的连接查询,那就

Oracle提高sql执行效率的心得建议

sql执行效率一直都是为人所关注,那到底应该怎样提高呢?有什么比较好的方法,下面与大家分享下比较不错的建议,感兴趣的朋友可以参考下,希望对大家有所帮助 复制代码 代码如下: -->FROM子句中包含多个表的情况下,选择记录条数最少的表作为基础表 -->解析WHERE子句是自下而上的 过滤条件要有顺序 -->ORACLE会将'*'转换成列名 -->DELETE会在rollback segment中存放可恢复信息,可以试试TRUNCATE -->COMMIT会释放:1.rollb

【Oracle】如何查看sql 执行计划的历史变更

   今天中午,突然接收到active session 数目飙高的报警,查看数据库,对于一个OLTP 类型的查询本应该走index range scan 却变成全部是 direct path read ,所有的sql 走了全表扫描.悲剧的是那个表是一个历史表 185G..故造成了许多session堆积,前台应用受到影响.回到问题本身,如果查看sql执行计划的变更?? oracle 10G 以后可以通过下面的三个视图查询到sql执行计划的历史信息: DBA_HIST_SQL_PLAN DBA_HI

几个关于oceanbase因系统原因 sql执行失败的案例

主要遇到的有5种情况: 1.由于合并操作导致sql执行失败的问题 这个问题在一个写入频繁系统中比较常见,之前也讲过怎么导致合并的. 在oceanbase合并期间,需要把内存中的数据落入到磁盘中,为了保证数据的一致性,会将正在执行的sql kill掉,但是sql并不是立刻kill,会保留100ms的时间给这个sql去执行,如果说执行不完成,就会被kill,哪怕是101ms.这时候就会导致sql执行失败. 2.由于sql执行时间超时,导致sql执行失败. 这个问题在所有的数据库中都会有,因为不可能放

sql执行机制

sql执行机制 1.对于普通的sql语句只有where条件的执行机制     首先我们要了解一下SQL语句的执行过程.SELECT字段FROM表名WHERE条件表达式那它们是按什么顺序执行呢? 分析器会先看语句的第一个词,当它发现第一个词是SELECT关键字的时候,它会跳到FROM关键字,然后通过FROM关键字找到表名并把表装入内存.接着是找WHERE关键字,如果找不到则返回到SELECT找字段解析,如果找到WHERE,则分析其中的条件,完成后再回到SELECT分析字段.最后形成一张我们要的虚表

sql执行顺序

原文:sql执行顺序SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理.       每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入.这些虚拟表对调用者(客户端应用程序或者外部查询)不可用.只是最后一步生成的表才会返回 给调用者.如果没有在查询中指定某一子句,将跳过相应的步骤.下面是对应用于SQL server 2000和SQL

oracle 会话 死锁 执行sql 执行job的方法_oracle

//根据用户分组会话 select t.USERNAME,count(*) from v$session t group by t.USERNAME //查找某一用户正在执行的sql_id值 select * from v$session t where t.USERNAME = 'BUDGET' and t.SQL_ID is not null //查找对应sql_id的对应sql语句 select m.SQL_TEXT from v$session t , v$sqlarea m where