2017-02-13 96 views
1

表1從一個表中選擇,從另一其中id不掛

enter image description here

表2

期望輸出

打開計數| 2

Pending | 0

已關閉| 0

等等....

我試着用下面這樣的查詢

SELECT d.status , COUNT(*) num,e.name FROM table1 d cross join table 2 e group by name; 

這就造成了

enter image description here

任何一個可以幫助我在此。

回答

4

您需要一個左加入。即使沒有右表中的行存在,這種類型的連接也會顯示左表中的所有行。

select t2.name, count(t1.id) 
from table2 as t2 
left join table1 as t1 on t2.name = t1.status 
group by t2.name 

注意,你需要在一列聚集來自table1產生0需要,因此count(t1.id)。即使沒有來自table1的行,count(*)也會產生1

A 交叉連接正如您在查詢中所做的那樣,只是簡單地創建了所涉及的兩個表的笛卡爾乘積,從而導致左表中的每行都與右表中的每行連接一次。

+0

上面的查詢是正確的, 2但我需要以這種方式顯示錶2中的所有名稱(打開,取消,關閉,固定,保留,打開,掛起,重新打開)並顯示(2,0,0,0,0,0,0 ,0)。 – JMR

+0

@JMR感謝您的編輯,你完全正確,我把兩張桌子混在一起。 'table2'必須是左表,與'table1'左連接。固定。 –

+0

它會導致(打開,取消,關閉,固定,保持,打開,掛起,重新打開)(2,1,1,1,1,1,1,1)....它在所有其他位置顯示1 .. – JMR

相關問題