2016-09-28 90 views
2

我有這兩個表格:ritter(ritterId, ritterName)quest(questID, ritterID, datum)MySQL如何使用where子句只爲count計算左連接?

現在我的問題是,我怎樣才能顯示所有從裏特與額外的列顯示在本週裏特爾的任務計數?

我嘗試這樣做:

select r.*, count(q.ritterID) from ritter as r left join quest as q on r.ritterID = q.ritterID group by r.ritterID; 

這工作,但沒有在那裏的原因本期周。

如果我這樣做:select r.*, count(q.ritterID) from ritter as r left join quest as q on r.ritterID = q.ritterID where weekofyear(datum) = weekofyear(now()) group by r.ritterID;

那麼它只會顯示當前星期做了探索裏特爾,但我想,它顯示了所有特。

輸出:

如何,它是:

enter image description here

如何應該是:

enter image description here

表特爾:

enter image description here

和表的任務:

enter image description here

我怎樣才能解決這個問題?

我希望你能理解我的意思和我想要的。對不起我的英語不好。

+0

我犯了一個錯誤。它在「ritterID」列中的「任務」表中應該是「1」。 – xCihat

回答

2

您是從溶液中不遠處,剛剛從那裏標準移動日期過濾器進入連接條件。這種方式只適用於表上的連接,而不是整個結果的右側:

select r.*, count(q.ritterID) 
from ritter as r left join quest as q 
    on r.ritterID = q.ritterID and weekofyear(datum) = weekofyear(now()) 
group by r.ritterID 

由於特爾的名字是功能上依賴於特爾ID,您的查詢將在最新版本的MySQL的罰款。但是,在舊版本中,如果設置了only_full_group_by sql模式,則可能會遇到麻煩。因此,將r.ritterName添加到group by子句可能會更好。

2

您必須在左連接中包含日期條件。

select r.*, count(q.ritterID) 
from ritter as r 
left join quest as q on r.ritterID = q.ritterID 
    AND weekofyear(datum) = weekofyear(now()) 
group by r.ritterID;