首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL联接筛选条件,mysql

SQL联接筛选条件,mysql
EN

Stack Overflow用户
提问于 2012-02-24 03:19:20
回答 1查看 1.1K关注 0票数 0

我有两个表,看起来像这样(这是我实际拥有的一个示例)。

表1:

代码语言:javascript
复制
Yr, Value
1990, 1
1990, 2
1991, 2
1992, 3

表2:

代码语言:javascript
复制
Dte, Value2, ID
1/1/1990, 10, 1
1/2/1990, 11, 1
1/3/1990, 12, 2
1/1/1991, 20, 1
1/2/1991, 21, 2

我想首先使用左连接连接两个表,然后丢弃连接集中的一些值,然后按ID分组。我写的代码看起来像这样:

代码语言:javascript
复制
    select avg(Value2) v2 
     from table2 
left join table1 on (year(dte)=yr) 
    where Value>1 
 group by ID;

是先执行连接,然后where语句中的过滤条件丢弃合并表中的行,还是先计算where条件,然后执行连接?上面的例子只是为了说明,这是一个关于SQL如何执行操作的更一般的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-24 03:27:21

这取决于表的声明顺序和wheres的顺序。在本例中,where是随后执行的。因此,以相反的顺序声明这些表会更有效,因为您有用于table1的where子句。

这样做的方法是,使用on-子句将table1中的所有行与table2中的行连接起来。最后,在连接的结果上使用where子句。但是,如下所示:

代码语言:javascript
复制
   select avg(Value2) v2 
     from table1 
left join table2 on (year(dte)=yr) 
    where Value>1 
 group by ID;

where子句首先在table1上执行,然后使用on子句执行连接。这是在已经简化的table1版本上完成的,因此效率更高。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9419717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档