私はこれと同様の解決策に対応しようとしています-私が持っているのはJOIN内のSELECTクエリであり、問題はクエリがすべての行に対して完全に実行されることです(私はテーブルごとに60,000行を話しています-そしてそれは実行されます3 つのテーブルで!)。
私がやりたいことは、JOIN 内の SELECT に WHERE 句を追加することです。しかし、外側の SELECT にアクセスできず、必要な適切な WHERE 条件を取得できません。私が試みているクエリは次のとおりです。
SELECT c.compete_id AS id,
s.id AS store_id,
c.enabled AS enabled,
s.store_name AS store_name,
s.store_url AS store_url,
c.verified AS verified,
r.rating_total AS rating,
r.positive_percent AS percent,
r.type AS type
FROM compete_settings c
LEFT JOIN stores s
ON c.compete_id = s.id
LEFT JOIN (
(SELECT store_id, rating_total, positive_percent, 'ebay' AS type FROM ebay_sellers WHERE store_id = c.compete_id)
UNION
(SELECT store_id, rating_total, positive_percent, 'amazon' AS type FROM amazon_sellers WHERE store_id = c.compete_id)
UNION
(SELECT store_id, CASE WHEN rank = 0 THEN NULL ELSE (200000 - rank) END AS rating_total, '100' as positive_percent, 'alexa' AS type FROM alexa_ratings WHERE store_id = c.compete_id)
) AS r
ON c.compete_id = r.store_id
WHERE c.store_id = :store_id
はフレームワークを介してバインドされた変数であることに注意してください:store_id
- それが number であると想像してみましょう12345
。
これどうやってするの?何か案は?