我有三個表,每個表分別是1:n。 table1中的條目在table2中有n個條目,依此類推。讓我們稱他們爲汽車,輪子和螺絲釘來說明。 螺絲可以清潔(1)或生鏽(2)。我一起加入他們,因爲我想統計兩件事情。首先,我想要有行,告訴我每個車有多少個好/壞的螺絲。所以基本上我越來越:加入子查詢,計數和分組
car_id wheel_id screw_state count(screws)
1 1 1 3
1 1 2 7
1 2 1 5
1 2 2 3
2 1 1 1
... and so on...
現在我想第二個事實,我即有多少生鏽和清潔的螺絲有每車所有車輪,而不需要知道每個車輪的每一個具體的數字。 所以基本上我現在只留下斷GROUP BY超過wheel_id,像這樣:
car_id screw_state count(screws)
1 1 8
1 2 10
2 1 1
... and so on...
的事情是,我需要他們兩個在一個單一的查詢,因爲否則我有大量的排序和重新安排去做。
我相信第二個更容易計算每個汽車的總螺絲數量應該作爲子查詢來完成,但是我可以使用子查詢輕鬆加入第一個更大的查詢嗎?
這是如何完成的?
我會很高興一個相當具體的答案,因爲我不是一個真正的SQL嚮導。
編輯:我正在研究一個ORM,所以像下面這樣怪異的想法(將col值篡改爲某個常量)不能輕易在那裏完成。我必須得到這個解決方案在那裏工作,所以JOIN/subquery/UNIONs沒有時髦的解決方法將是偉大的。
現在來測試的,可悲的是我的MySQL服務器犯規一樣,「-1 wheel_id」語法。我試圖寫wheel_id = -1,它似乎工作,除了在輸出的事實,wheel_id出來的總計數爲0,而不是-1,但其餘似乎工作。 – Tom 2009-09-16 09:37:10
我使用MS SQL服務器語法,可能對於你必須放置的MySQL:-1 as wheel_id。我在我的答案中解決了它。 – manji 2009-09-16 09:42:21
SELECT car_id,-1,screw_state,count(螺絲)適用於我 – Tom 2009-09-16 10:23:40