2013-12-21 3 views
0
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

Обе таблицы указаны на sku_key? Я не считаю, что соединение должно снизить производительность, поскольку первая проверка, в которой содержится таблица sku_key, также занимает много времени – Brendan

+0

tbl_magazine_subscription_dtl - tbl_magazine_issue отнимает много времени. –

+0

, потому что только один имеет эквивалентность sku_key, тогда он принимает все данные из таблицы. если возможно, sku_key присутствует в соответствующей таблице, прежде чем присоединяться к ней –

ответ

0

Я не совсем понимаю ваш вопрос, вы хотите только строки, где sku_key не является нулевым и присутствует как в tbl_magazine_issue, так и в tbl_magazine_subscription_dtl? В этом случае вы должны сделать внутреннее соединение вместо левого внешнего соединения на tbl_magazine_issue и добавить в пункт WHERE. Механизм запросов должен быть достаточно умным, чтобы применить это условие до объединения.

Вы также должны убедиться, что sku_key и PurchaseKey проиндексированы, если вас беспокоит выполнение этого соединения.

+0

Я хочу magazine_id, идентификатор издателя. Эти подробности представлены в tbl_magazine. Но привязываясь к этой таблице, я хочу присоединиться к tbl_magazine_subscription или tbl_magazine_issue, потому что эта таблица содержит sku_key. Ключ Sku, связанный с подпиской, если запись подписана, то sku находится с tbl_magazine_subscription другим мудрым tbl_magazine_issue. одна sku_key связана с одной таблицей за раз. поэтому одно из соединений бесполезно. поэтому я хочу избежать этого присоединения –

Смежные вопросы