目的:現在の会社の外にある、現在の会社に存在しないすべての「別個の」リードを数えるクエリが必要です。クエリが複数のテーブル間で数百万レコード(lead_details、ドメイン、会社)MySQLクエリの最適化には何百万ものレコードがあります
EXAMPLE:
company 1 -> domain 1 -> lead 1 lead_details records exists.
company 2 -> domain 2 -> lead 1 lead_details records exists.
company 2 -> domain 2 -> lead 2 lead_details records exists.
company 3 -> domain 3 -> lead 2 lead_details records exists.
company 3 -> domain 3 -> lead 3 lead_details records exists.
結果を考慮する必要があります:私は会社の1で上記のデータのクエリを実行すると、結果はカウントする必要があります(2 )リード2 &以来3を導く独特であり、ここでは、会社に1
domain_id domain_name company_id company_name lead_id lead_count
"2" "D2" "2" "C2" "2" "2"
"3" "D3" "3" "C3" "3" "1"
存在しません、私のクエリで、誰もが任意のより良い提案を持っている場合は私に知らせてください。
SELECT al.*
FROM (
SELECT
d.id AS domain_id,
d.name AS domain_name,
c.id AS company_id,
c.name AS company_name,
ld.lead_id,
count(ld.lead_id) as lead_count
FROM domains d
INNER JOIN company c
ON (c.id = d.company_id AND c.id != 1)
INNER JOIN lead_details ld
ON (ld.domain_id = d.id)
GROUP BY ld.lead_id
) al
LEFT JOIN (
SELECT ld.lead_id FROM domains d
INNER JOIN company c
ON (c.id = d.company_id AND c.id = 1)
INNER JOIN lead_details ld
ON (ld.domain_id = d.id)
) ccl
ON al.lead_id = ccl.lead_id
WHERE ccl.lead_id IS NULL;
私はほとんど万行を持っているので、よりよい解決策を把握する必要があり..
あなたの質問には 'SHOW CREATE TABLE domains'の出力を加え、' company'と 'lead_details'テーブルにも同じ出力を加えてください。これにより、既存の索引の表示やデータ型の検証が可能になります。 –