是否有必要在连接中过滤外部查询?

时间:2016-10-03 22:41:04

标签: sql inner-join where

查询:

SELECT i1.* 
FROM   (SELECT store_id, 
               transaction_fid 
        FROM   transactions i 
               inner join (SELECT prod_id 
                           FROM   products 
                           WHERE  category = '802') p 
                       ON i.prod_id = p.prod_id 
        WHERE  i.date_id = '10-SEP-16') i1 
       inner join transactions i2 
               ON i1.store_id = i2.store_id 
                  AND i1.transaction_fid = i2.transaction_fid 

在上述查询中,我试图获取包含属于category' 802'

的商品的交易

内部查询与transactions中的每一行匹配,其中prod_idprod_id 802中项目的category

外部查询然后获取store_idtransaction_fid并将它们连接回事务表以获取匹配事务中的所有其他项。

我的问题是 - 我是否需要将外部查询过滤到与内部查询相同的日期范围,或者在效率/查询运行时间方面无关紧要?

有没有更好的方法来实现我想要做的事情?

2 个答案:

答案 0 :(得分:2)

根据您的表名和连接类型,查询应该类似于:

select i1.store_id,i1.transaction_fid
from  transactions i1
inner join products p
on i1.prod_id = p.prod_id 
where p.category = '802'
and i1.date_id = '10-SEP-16'

答案 1 :(得分:0)

这很简单吗?

SELECT tr.*
FROM transactions AS tr
INNER JOIN products AS p ON p.prod_id=tr.prod_id
WHERE i.date_id = {d'2016-09-10'}
  AND pr.category='802' --really string value? If int-value better as naked number

顺便说一句:你真的应该避免日期/时间值作为依赖于字符串文字的文化!