【问题标题】:SQL Filtering when joining加入时的 SQL 过滤
【发布时间】:2020-03-09 23:41:57
【问题描述】:

有点新手问题,我正在运行查询并离开加入,想知道在性能方面指定过滤器时是否存在差异,例如在下面,顶部我在第一次加入后直接过滤,下面是我做所有的连接然后过滤:

Select t1.*,t2.* from t1 t1    
left join t2 t2    
   on t1.key = t2.key    
   and t1.date < today    
left join t3 t3 
   on t2.key2 = t3.key

Select t1.*,t2.*  from t1 t1    
left join t2 t2    
     on t1.key = t2.key       
left join t3 t3
     on t2.key2 = t3.key    
     and t1.date < today 

【问题讨论】:

  • 取决于您的 RDBMS,因此比较两个查询的查询执行计划并找出答案。
  • 使用 oracle 数据库,我没有计划表错误
  • 这个问题没有显示任何研究工作。请参阅 How to Ask、其他 help center 链接和投票箭头鼠标悬停文本。
  • “表错误”是什么意思?

标签: sql oracle join filter


【解决方案1】:

了解 LEFT JOIN ON 返回的内容:INNER JOIN ON rows UNION ALL 由 NULL 扩展的不匹配的左表行。作为 OUTER JOIN 的一部分,始终知道您想要什么 INNER JOIN。

一般来说,您的查询对于第一个左连接有不同的内部连接和空扩展行,然后由于更多的连接而产生进一步的差异。除非某些约束成立,否则 2 个查询会返回其输入的不同函数。所以比较他们的表现似乎没有意义。

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多