一个查询优化的问题

redshiliu 2012-03-02 11:04:25
现在有3各表或者视图 a,b,c,d都有一个字段code,现要查找a中code同时在b,c,d中的记录
是用多个in子查询号还是先讲b,c,d inner join了好?如下:

方案1:
select code from a where
code in (select code from b) and
code in (select code from c) and
code in (select code from d)

方案2:
select code from a where code in (
select b.code from b,c,d where b.code=c.code and b.code=d.code)

方案3:
select code from a where code in (
select t1.code from (select b.code from b) t1
inner join (select c.code from c) t2 on t1.code=t2.code
inner join (select d.code from d) t3 on t1.code=t3.code
)

请教下三个方案的优缺点及执行流程。

...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
大力水手 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ap0405140 的回复:]

SQL code

select a.*
from a
inner join b on a.code=b.code
inner join c on a.code=c.code
inner join d on a.code=d.code
[/Quote]
不写了直接引用
唐诗三百首 2012-03-02
  • 打赏
  • 举报
回复

select a.*
from a
inner join b on a.code=b.code
inner join c on a.code=c.code
inner join d on a.code=d.code
AcHerat 2012-03-02
  • 打赏
  • 举报
回复

select distinct a.code from a,b,c,d where a.code=b.code and b.code=c.code and b.code=d.code
AcHerat 2012-03-02
  • 打赏
  • 举报
回复

select a.code
from a join (select b.code from b,c,d where b.code=c.code and b.code=d.code) t
on a.code = t.code
fanzhouqi 2012-03-02
  • 打赏
  • 举报
回复
看不出来,要看执行计划才知道
redshiliu 2012-03-02
  • 打赏
  • 举报
回复
在表比较多的时候(大于3个)是用inner join还是in子查询好?
tg_hgh163 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 acherat 的回复:]
SQL code


select distinct a.code from a,b,c,d where a.code=b.code and b.code=c.code and b.code=d.code
[/Quote]


这个最直接了
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 Node.js作为一个运行环境,其基础是Chrome的V8引擎,它最突出的优势在于能够支持JavaScript代码在服务器端执行,从而为网络应用程序创造了一个全新的执行平台。在Node.js生态中,文件系统的相关操作由fs模块承担,而fs.readFile作为其中的关键方法,专门用于实现文件内容的获取。本文旨在全面阐释fs.readFile方法的相关信息,包括其功能说明、语法结构、参数配置、应用范例以及源代码实现,以供那些需要在Node.js环境中进行文件操作的程序员参考。 fs.readFile方法具备异步特性,意味着它在执行文件读取任务时不会中断当前程序的运行流程,使得程序的其他部分能够同步执行。该方法的工作流程是:一旦调用,Node.js会立即反馈执行信号,然后在后台线程中执行文件读取任务。当文件读取任务完成后,Node.js会通过一个预设的回调函数来处理读取结果或识别错误。 fs.readFile方法的语法结构如下: fs.readFile(path[, options], callback) - path:一个必须的参数,其数据类型可以是字符串、Buffer或Uint8Array,用于指示文件的具体位置或文件描述符。 - options:一个可选参数,形式为一个对象,用于设定文件的编码格式及打开模式。该对象中可以包含encoding(字符编码,默认值为null,此时返回Buffer对象)和flag(文件打开模式,默认值为r,代表只读模式)。 - callback:一个必须的回调函数,在文件读取任务结束后被触发。若读取过程中出现错误,err参数将包含错误详情,否则为n...

22,296

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧