2012-09-08 29 views
1

在這個查詢中,我使用了一個UNION來簡單地組合兩個幾乎相同的查詢的結果。唯一的區別是WHERE子句中的tp.t_id不同。我在這裏重命名了表名,只是爲了突出顯示UNION中的兩個查詢是如何相似的。 (我不認爲這些表實際上被稱爲什麼是相關的)。是否可以將此SQL聯合聲明分解?

我想知道是否有辦法將這些查詢中的冗餘分解出來,如果沒有其他用於維護的目的。

謝謝!

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 

回答

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 
+0

這並不返回相同的結果(這固然是奇數 - 爲2行,除非'SUM'是相同的時,它會之一) –

+0

如果我GROUP BY t_id就足夠了。 – glutz

+0

@MartinSmith:的確,謝謝,我已經添加了「GROUP BY」。 –

相關問題