今天在javaeye论坛上看大一道数据库面试题
总结一下:
两张表:
A:id,age,column1,column2
B:id,age,column1,column2
A.id 与 B.id关联。
将B中age>40的column1,column2更新到A的相应记录中,只能写一个语句。
写出mysql和oracle两个版本。
update A
set A.column1 = (
select b.column1
from B where B.id = A.id
and B.age > 40
),
A.column2 = (
select b.column2
from B where B.id = A.id
and B.age > 40
)
oracle && mysql
:
update A set (c1,c2)=(select c1,c2 from B where id=a.id and age>40)
where id in (select id from b where age>40)
SQL2000:
update a set column1=b.column1 ,column2=b.column2 from a ,b where a.id = b.id and b.age>40
armorking 写道
aimer311 写道
armorking 写道
oracle
update A
set A.column1 = (
select b.column1
from B where B.id = A.id
and B.age > 40
),
A.column2 = (
select b.column2
from B where B.id = A.id
and B.age > 40
)
我基本上思路跟这个一样,想不出mysql跟oracle有什么不一样
update A
set A.column1 = (
select b.column1
from B where B.id = A.id
and B.age > 40
),
A.column2 = (
select b.column2
from B where B.id = A.id
and B.age > 40
) where A.id=B.id and B.age>40
因为是A,B相应记录,所以我加上了where条件。
感觉好别扭。
where条件是必须的
不加条件的话,A表中的所有记录都会被更新
对于A中不满足A.id=B.id and B.age>40条件的记录而言,
column1和column2会被更新为null
不过where条件可以用IN或者EXISTS的形式
如
方式一
where A.id
in (select B.id from B where B.id = A.id and B.age > 40)
或者
方式二
where
exists (select 1 from B where B.id = A.id and B.age > 40)
当然直接用如下形式的条件也是可以的
方式三
where A.id
= (select 1 from B where B.id = A.id and B.age > 40)
不过,方式三的情况下,当B中存在重复id的时候,可能会报ora-01427错误,
因为这种方式会要求作为条件值的子查询只有一个返回值
所以,子查询中还应当加上distinct或者rownum=1这样的限制
再参照ls的合并更新项目的做法,sql文如下
update A
set (A.column1, A.column2) = (
select B.column1, B.column2
from B where B.id = A.id
and B.age > 40
and rownum = 1
)
where exists (
select B.id
from B
where B.id = A.id and B.age > 40
)
以下是测试用的建表语句
create table A (
id varchar2(1),
column1 varchar2(1),
column2 varchar2(1)
)
/
create table B (
id varchar2(1),
column1 varchar2(1),
column2 varchar2(1),
age number
)
/
delete from A;
insert into A(id, column1, column2) values ('1', '1', '1');
insert into A(id, column1, column2) values ('1', '1', '1');
insert into A(id, column1, column2) values ('2', '2', '2');
insert into A(id, column1, column2) values ('3', '3', '3');
delete from B;
insert into B(id, column1, column2, age) values ('1', 'X', 'X', 41);
insert into B(id, column1, column2, age) values ('2', 'X', 'X', 21);
insert into B(id, column1, column2, age) values ('3', 'X', 'X', 51);
insert into B(id, column1, column2, age) values ('3', 'Y', 'Y', 51);
commit;
ps:我个人认为,把这个问题作为面试题,并不见得合适
分享到:
相关推荐
笔试面试题 一道面试题关于信息系统的问答和注意事项 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的...
《一道面试题的思考——深入理解memcpy函数的实现》 在C语言中,`memcpy`函数是一个非常重要的内存操作函数,用于将一块内存区域的数据复制到另一块内存区域。在面试中,这个问题常用来测试候选人的基础知识、逻辑...
从一道面试题深入探讨Linux下fork的运行机制 在Linux操作系统中,`fork()`系统调用是进程管理的核心功能之一,它允许一个已存在的进程创建一个新的进程,即子进程。子进程几乎完全复制父进程的状态,包括内存映像、...
java截取字符串,一道面试题。好像没有找到正确答案,今天找时间做了一个,仅供参考。本人运行过了。
"每天花5分钟的时间,弄懂一道面试题 or Js小知识"揭示了这份资源的目的,即通过每日的学习和思考,帮助用户逐步提升技能,每天进步一点点。"流年笑掷,未来可期"可能是这个学习计划的口号,鼓励持续努力,期待未来...
计算机后端-Java-Java核心基础-第21章 常用类 09. String的一道面试题.avi
综上所述,通过遵循开发规范、优化数据结构和模型、使用合适的性能优化策略以及借助自动化工具,可以有效地解决面试题中提到的数据库性能和数据安全问题。同时,开发团队和DBA需要持续关注和改进这些方面,以确保...
根据给定的信息,我们可以深入探讨这道华为面试题——“两个长数字相乘”的实现细节与背后的算法原理。 ### 题目解析 题目要求计算两个长整数相乘的结果,这里的“长整数”指的是那些无法直接用现有的数据类型(如...
在上述的面试题中,面试者需要实现一个名为add的函数,该函数可以实现连续调用并累加求和的功能。例如,add(1)(2)应该返回3,add(1, 2, 3)(10)应该返回16。解决这个问题需要对JavaScript中的函数、函数的构造方法、...
最新版Java面试宝典,精心提炼核心重点内容简化应用面试实战10秒一道,Java初级,高级,框架,底层原理,数据库,操作系统,微服务,IO,并发,JVM,容器,SpringBoot,SpringCloud,linx,面向对象,常用类,多线程,...
年薪40万的一道面试题
根据给定的信息,我们可以推断出这是一道与算法相关的面试题目。虽然提供的部分内容看起来较为混乱,但结合标题、描述及标签,我们可以尝试解析并构建一个相对完整的算法问题。 ### 题目背景 一家知名公司在招聘...
附有答案和解析:文章中每一道面试题都附带有答案和解析,读者可以参考答案和解析来检验自己的理解和掌握程度,加深对Python语言的理解和认识。 推荐对象:准备参加Python面试的程序员、Python初学者、Python爱好者...
这个问题通常出现在面试中,以评估应聘者的算法理解、逻辑思维以及对Java编程语言的掌握程度。下面我们将详细探讨这个问题及其解决方案。 首先,我们来看如何合并两个数组。在Java中,可以使用`System.arraycopy()`...
...而在XHTML 1.0 Strict中,所有标签必须闭合,`<p>`和` `也不例外,且标签名必须小写。此外,非破坏性空格(` ...在面试或实际工作中,对于HTML的精细理解和合理运用往往能体现出一个人的前端开发水平。
在IT领域,尤其是在数据处理和算法设计中,面试题经常涉及到如何高效地处理大规模数据。本题目的核心是探讨在有限内存环境下,如何求解两个大数据集合的交集。这里我们有6000万数据包(假设为数据集A)和300万数据包...
分析:这是去年google 的一道面试题。 我看到这道题目时,第一反应就是每次push 一个新元素时,将栈里所有逆序元素排序。这样栈顶元素将 是最小元素。但由于不能保证最后push 进栈的元素最先出栈,这种思路设计的...
每天一道面试题,再也不怕面试官 先做一下自我介绍 您好,我是xxx,毕业于xxx大学,今天面试贵公司的web前端岗位,我想从以下三个方面介绍自己。 项目经历。 接触前端工作有四年时间了,前两年在一家法律互联网公司...
一道关于项目整合的面试题
企业公司软件测试面试笔试题集合 软件测试面试题 (测试基础).doc 01_企业面试试卷(综合).doc 01_企业面试试卷(综合)_参考答案.doc 04_企业面试试卷(测试基础).doc 04_企业面试试卷(测试基础)_参考答案.doc...