`

一条SQL的疑问

阅读更多
今天遇到了一个问题,查了一下SQL的执行顺序。http://www.blogjava.net/youling/archive/2009/03/06/243177.html
但是,还是没有解决问题。SQL如下:

update vip set lastlevelmodifieddate=b.adjustdate from vip a, (
select vipno, min(adjustdate) as adjustdate from vipleveladjustmentform
where currentlevel = '1' and lastlevel = '6' and
vipno in (select vipno from vip where joindate < '2010-03-10') group by vipno
)b
where a.vipno=b.vipno

最后,执行的结果居然把在b中不存在的vipno也修改了,不知道为什么?
希望以后找个机会解决,或者有高手也帮忙解决一下。当然,不一定要一模一样的数据库表,大家可以建立两个表,根据相同的原理试一下。例如下面两个表a,b.
CREATE TABLE a
(
  pk integer NOT NULL,
  vipno text,
  createddate timestamp with time zone,
  CONSTRAINT a_pkey PRIMARY KEY (pk)
)
WITHOUT OIDS;
ALTER TABLE a OWNER TO postgres;

CREATE TABLE b
(
  pk integer NOT NULL,
  vipno text,
  createddate timestamp with time zone,
  CONSTRAINT b_pkey PRIMARY KEY (pk)
)
WITHOUT OIDS;
ALTER TABLE b OWNER TO postgres;

然后插入数据,如下:
insert into a values (1, 'a001', '2010-01-05 19:53:36.208')
insert into a values (2, 'a002', '2010-01-05 19:53:36.208')

insert into b values (1, 'a001', '2010-01-01 19:53:36.208')

然后执行SQL:
update a set createddate=c.adjustdate from a as d, (
select vipno, min(createddate) as adjustdate from b group by vipno
)c
where d.vipno=c.vipno
结果表a中的两条数据的createddate都被修改了,为什么呢?
0
0
分享到:
评论
1 楼 laoshifu 2010-03-04  
经过一个多小时的尝试,发现了问题,发现update的表如果在from语句中使用了别名,貌似已经跟要update的表分离开了。例子中的SQL应该如下:
update a set createddate=c.adjustdate from (
select vipno, min(createddate) as adjustdate from b group by vipno
)c
where a.vipno=c.vipno

本来的问题的SQL应该如下:
update vip set lastlevelmodifieddate=b.adjustdate from (
select vipno, min(adjustdate) as adjustdate from vipleveladjustmentform
where currentlevel = '1' and lastlevel = '6' and
vipno in (select vipno from vip where joindate < '2010-03-10') group by vipno
)b
where vip.vipno=b.vipno

相关推荐

    一条SQL语句查询多个数据库

    需求:一条SQL语句从多个数据库查询出相关联的结果,输出到客户端 调查:spring框架可以配置多数据源;...以上所述是小编给大家介绍的一条SQL语句查询多个数据库 ,希望对大家有所帮助,如果大家有任何疑问请

    oracle查看执行最慢与查询次数最多的sql语句

    以下是一个示例查询: ```sql SELECT sa.SQL_TEXT, sa.SQL_FULLTEXT, sa.EXECUTIONS "执行次数", ROUND(sa.ELAPSED_TIME / 1000000, 2) "总执行时间", ROUND(sa.ELAPSED_TIME / 1000000 / sa.EXECUTIONS,...

    批量导入Excel数据,生成sql

    在IT行业中,批量导入Excel数据并生成SQL是一种常见的任务,特别是在数据分析、数据库管理以及系统集成等领域。这个过程涉及到了文件处理、数据解析、SQL语句的构造等多个技术环节。下面,我们将详细探讨这个主题。 ...

    SQL语句学习手册实例版.rar

    如`INSERT INTO Orders (OrderID, CustomerID, OrderDate) VALUES (10248, 'VINET', '1996-07-04')`会插入一条新的订单记录。 3. **数据更新**:UPDATE语句用于修改已存在的数据。例如,`UPDATE Employees SET ...

    《sql anywhere studio 9开发指南》代码.doc

    《SQL Anywhere Studio 9开发指南》是一本详细介绍如何在SQL Anywhere Studio 9环境中进行数据库开发的书籍。这本书提供了大量的代码示例,方便读者理解和应用。以下是对书中的主要知识点的详细阐述: 1. 创建...

    Oracle SQL

    以上总结的知识点,基于《Oracle SQL》一书的内容,结合了作者Neena Kochhar、Debby Kramer等多位Oracle专家的专业见解和技术贡献者们的审阅,旨在为Oracle SQL的学习者提供一条清晰、高效的学习路径。无论是初学者...

    关于 SQL 的基本概念、特性、常用命令和应用领域的简要介绍

    例如向 `users` 表中插入一条新记录: ```sql INSERT INTO users (id, name, email) VALUES (1, 'John Doe', 'john@example.com'); ``` - **UPDATE**: 更新现有数据记录。例如更新 `users` 表中某条记录的电子...

    jsp简单连接SQL Server2000数据库的方法.docx

    如果连接成功,则会输出一条“链接成功”的日志信息;如果发生异常,则打印异常堆栈。 - **main()方法** 主方法用于测试连接是否成功。通过调用`getConnection()`方法来建立连接。 #### 进一步扩展 除了基础的...

    基于ASP技术和SQL数据库的成绩查询系统的设计与实现.pdf

    留言板功能提供了一个师生交流的平台,学生可以就成绩问题提出疑问,教师可以解答学生的疑问,增加了系统的互动性。 系统细节功能是指在实现基础功能的同时,根据实际需求增加的一些辅助功能,例如成绩统计、打印...

    sqlserver 使用SSMS运行sql脚本的六种方法

    例如,如果在查询编辑器中有多条语句,按F5或使用其他执行方式时,SSMS会一次性执行所有未分号结束的语句。如果只想执行单个语句,确保该语句前后无其他未执行的语句,并将其单独选中。 此外,执行SQL脚本时,SSMS...

    医药连锁店管理系统SQL.docx

    当用户访问某条留言时,系统会通过更新SQL数据表增加该留言的访问计数。这通常涉及到一个条件判断和数据更新操作,例如,如果查询到的id存在,就执行计数自增。 在实际的实现过程中,可能会使用如ASP(Active ...

    Mybatis 中的sql批量修改方法实现

    Mybatis,作为一款强大的Java持久层框架,提供了便捷的SQL映射功能,其中包括批量修改的方法。本篇文章将深入探讨如何在Mybatis中利用`&lt;foreach&gt;`标签实现SQL批量修改。 批量更新通常比单条更新更有效率,因为它...

    SQL Server触发器及触发器中的事务学习

    自动提交事务是默认模式,每条DML语句都会被当作一个单独的事务处理。隐式事务在没有显式事务声明的情况下开始一个新的事务,直到遇到COMMIT或ROLLBACK。 批范围的事务是在批处理级别定义的,即一组SQL语句被视为一...

    Java web 课程设计(宿舍管理系统)

    而且在查询某条记录的时候,由于数据量庞大,只能依靠人工一条一条去查,效率极低。采用计算机来管理宿舍和学生信息,大大提高了查询速度,节约了人力物力,达到了预期的要求。 sql脚本我会后续上传,需要的可在我...

    Python自动化测试疑问及解决方案.docx

    最后,关于如何封装断言,我们可以创建一个`Assertion`对象,包含`sql_values_list`和`response_values`列表,用于存储SQL查询结果和接口响应数据。通过`get_sql_data`方法获取SQL数据并添加到列表,通过`get_...

    oracle优化笔记

    计划,发现 SQL2 的执行计划也是全表扫描,这里 t1.name=的取值为 cc 的返回仅仅 10 条 记录,而 T1 表记录都在 5 千万左右, T2 表在 200 万左右,需要全扫这么大的两个表而获 取仅有的 10 记录吗? 这里又要再次...

    mybatis代码生成工具

    映射文件(Mapping)包含具体的SQL语句,每个方法对应一条SQL。在XML文件中,你可以看到如何通过MyBatis的语法来定义动态SQL,如条件查询、排序、分页等。这些SQL语句在运行时会根据传递的参数动态生成,提供了很高...

    HAP框架-PLSQL调用使用手册.docx

    《HAP框架-PLSQL调用使用手册》是专为使用HAP框架进行PL/SQL调用的开发者设计的一份详细指南。该手册由Chenxinkai编写,最初创建于2016年7月6日,并在7月24日进行了最后更新,版本号为1.0。文档旨在帮助用户理解和...

Global site tag (gtag.js) - Google Analytics