あなたの質問
SELECT sum(d.data) as total
FROM data d, ta, tb
WHERE
(d.type LIKE "type_a" AND d.type_id = ta.id)
OR
(d.type LIKE "type_b" AND d.type_id = tb.id)
GROUP BY a.customer_id, b.customer_id;
dにレコードが1つだけあり、それがtype_aであるとします。 taとtbにはそれぞれ2つのレコードがあります。 dのレコードは、d.type_id=ta.id
のtaのレコードの1つと一致します 。したがって、(d x ta)の組み合わせにより、任意のtbレコードを最終結果に残すことができます。意図しないデカルト積を取得します。
SELECT x.customer_id, SUM(data) total
FROM
(
SELECT ta.customer_id, d.data
FROM data d JOIN ta
ON (d.type LIKE "type_a" AND d.type_id = ta.id)
UNION ALL
SELECT tb.customer_id, d.data
FROM data d JOIN tb
ON (d.type LIKE "type_b" AND d.type_id = tb.id)
) X
GROUP BY x.customer_id;