在这个查询中,我使用UNION简单地组合了两个几乎相同的查询的结果。唯一的区别是WHERE子句中的tp.t_id是不同的。我在这里重命名了表名,只是为了突出显示UNION中的两个查询是如何相似的。 (我认为实际调用这些表并不重要。)
我想知道是否有办法在这些查询中分解冗余,如果没有其他用于维护目的。
谢谢!
SELECT SUM(s.count) AS total
FROM Table1 s
JOIN Table2 p ON p.id=s.p_id
JOIN Table3 tp ON tp.p_id=s.p_id
JOIN Table4 t ON tp.p_id=s.p_id
WHERE s.g_id=1 AND tp.t_id=1 AND s.type=1
UNION
SELECT SUM(s.count) AS total
FROM Table1 s
JOIN Table2 p ON p.id=s.p_id
JOIN Table3 tp ON tp.p_id=s.p_id
JOIN Table4 t ON tp.p_id=s.p_id
WHERE s.g_id=1 AND tp.t_id=2 AND s.type=1
答案 0 :(得分:5)
是的,请使用IN()
:
SELECT SUM(s.count) AS total
FROM Table1 s
JOIN Table2 p ON p.id=s.p_id
JOIN Table3 tp ON tp.p_id=s.p_id
JOIN Table4 t ON tp.p_id=s.p_id
WHERE s.g_id=1 AND tp.t_id IN (1, 2) AND s.type=1
GROUP BY tp.t_id