SELECT tm.MAGAZINE_ID, tm.publisher_id, tu.begin_date, tu.report_from,
units `MAGAZINE_NAME`
FROM `tbl_itunes_report` tu
LEFT JOIN tbl_magazine_subscription_dtl tsd
ON tsd.subscription_key = tu.sku_key
AND ((tu.begin_date >= tsd.start_date
AND tu.begin_date < tsd.end_date) OR (tu.begin_date >= tsd.start_date
AND tsd.end_date = '0000-00-00'))
LEFT JOIN tbl_magazine_subscription ts
ON ts.magazine_subscription_id = tsd.subs_id
LEFT JOIN tbl_magazine_issue ti
ON ti.PurchaseKey = tu.sku_key AND ti.OS_SELECT = 0
LEFT JOIN tbl_magazine tm
ON tm.magazine_id = ts.magazine_id OR tm.magazine_id = ti.magazine_id
WHERE `product_type_identifier` LIKE 'IA%'
AND ( tsd.subscription_key IS NOT NULL OR ti.PurchaseKey IS NOT NULL )
GROUP BY tm.MAGAZINE_ID,tsd.no_of_issues
ORDER BY tm.magazine_name, tsd.no_of_issues
使用此查询,我将生成我的报告。它有4个连接。
在tbl_magazine_subscription_dtl
的情况下,tbl_magazine_issue
使用sku_key
字段进行加入。 sku_key
值一次只出现在一个表中,但加入将导致查询速度降低。是否可以在执行连接之前检查是否存在sku_key
?
答案 0 :(得分:0)
我不完全理解您的问题,您是否只想要sku_key
不为空并且同时出现在tbl_magazine_issue
和tbl_magazine_subscription_dtl
中的行?在这种情况下,您应该在tbl_magazine_issue
上执行内连接而不是左外连接,并在AND tu.sku_key IS NOT NULL
子句中添加WHERE
。查询引擎应足够智能,以便在加入之前应用此条件。
如果您担心此次加入的效果,还应确保将sku_key
和PurchaseKey
编入索引。