我有两个包含三列的表,其中包含相同类型的信息(id,attributes和amount)。我想将它们组合在一个联合中,并将该联合与另一个包含id列表的表联接起来以过滤它们,然后对常用属性求和。
table_a table_b table_ids
id attr amount id attr amount uid a_id
1 'atr1' 10 1 'atr2' 4 'id1' 1
1 'atr2' 5 2 'atr3' 2 'id2' 2
2 'atr3' 7 2 'atr1' 11
3 'atr1' 8
我试过
SELECT table_ids.uid, t.attr, SUM(t.amount)
FROM table_ids
JOIN (SELECT CONCAT('a', id) AS comb_id, attr, amount FROM table_a
UNION ALL
SELECT CONCAT('b', id) AS comb_id, attr, amount FROM table_b
) t
ON CONCAT('a', table_ids.a_id) = t.comb_id
GROUP BY t.attr
但我只得到最后一个匹配a_id的属性和匹配行数乘以总和的最后一个匹配行数。
(将会有另一个表具有更多id的过滤table_b属性,但我还没有找到一个过滤表。)
答案 0 :(得分:1)
很难100%确定你的目标,但这样的事情可能符合要求
SELECT
joinedData.uid,
joinedData.attr,
SUM(joinedData.amount) AS amount
FROM (
(
SELECT
table_ids.uid,
table_a.attr,
SUM(table_a.amount) AS amount
FROM table_a
INNER JOIN table_ids
ON table_ids.a_id = table_a.id
GROUP BY table_ids.uid, table_a.attr
)
UNION
(
SELECT
table_ids.uid,
table_b.attr,
SUM(table_b.amount) AS amount
FROM table_b
INNER JOIN table_ids
ON table_ids.b_id = table_b.id
GROUP BY table_ids.uid, table_b.attr
)
) AS joinedData
GROUP BY joinedData.uid, joinedData.attr
当然假设table_b将id加入table_ids.b_id,根据需要进行更改。