2011-12-11 58 views
1

我有3個表。來自3個表的MySQL查詢(計數)

Mark 
id_mark 
mark_name 

example record: 
1, 'Ford' 
2, 'Fiat' 

Model 
id_model 
id_mark 
mondel_name 

example record: 
1, 1, 'Focus' 
2, 2, 'Panda' 

Adds 
id_adds 
id_model 
name 
price 
etc. 

example records: 
1 1 'My ad', 20000 
2 1 'My ad2', 30000 
3 2 'My ad3', 30000 

如何執行該返回結果的查詢(可添加計數)例如:

Ford 2 
    Fiat 1 

2 and 1 count 

回答

2

你需要兩個連接。我已將第二個指定爲LEFT OUTER JOIN,以便它可以返回0,表示沒有關聯廣告的品牌。 Mark通過Model加入到Adds

SELECT 
    mark_name, 
    COUNT(id_adds) AS num_ads 
FROM 
    Mark JOIN Model ON Mark.id_mark = Model.id_mark 
    LEFT OUTER JOIN Adds ON Model.id_model = Adds.id_model 
GROUP BY mark_name 
+0

我認爲這是通過更好地按id_mark。我認爲它的標記表的主要關鍵。表現會更好。 – Kousalik

+0

Mark.id_model?列id_model僅在Model中。 – Pitu

+0

@PiotrRugałaTypo,修正,謝謝。 –

2
SELECT 
    mark_name, 
    COUNT(id_adds) AS num_adds 
FROM Mark 
LEFT JOIN Model ON Mark.id_mark = Model.id_mark 
LEFT JOIN Adds ON Model.id_model = Adds.id_model 
GROUP BY Mark.id_mark 
+1

group by id_mark?通過id_model分組將返回不良結果。 – Kousalik

+1

'GROUP BY Mark.id_mark'應該是。 –

+0

在這個特定的情況下按模型組將會工作,但我認爲Kousalik你是對的 - 它應該是由馬克,我編輯後 - 謝謝你 –

1
Select mark.mark_name, count(adds.id_adds) from adds join model on adds.id_model = model.id_model join mark on model.id_mark = mark.id_mark group by mark.id_mark; 

我不是100%肯定,但這樣的事情應該工作

+0

您可以編輯您的答案,並通過選擇它並單擊「{}」按鈕「將代碼標記爲代碼。或者在代碼的每一行的開始放置4個空格。 –