आपकी क्वेरी
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 में केवल एक रिकॉर्ड है, और यह type_a है। टा और टीबी प्रत्येक में दो रिकॉर्ड हैं। d में रिकॉर्ड d.type_id=ta.id
पर टा के किसी एक रिकॉर्ड से मेल खाता है . इसलिए, (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;