2014-10-16 83 views
0

鑑於以下兩個表:計數加入

<div style="float:left;width:48%;"> 
 
<label>Table1</label> 
 
<table> 
 
    <thead style="background:green;"> 
 
    <tr> 
 
     <th>ID</th> 
 
     <th>Name</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody style="background:yellow;"> 
 
    <tr> 
 
     <td>1</td> 
 
     <td>Apple</td> 
 
    </tr> 
 
    <tr> 
 
     <td>2</td> 
 
     <td>Orange</td> 
 
    </tr> 
 
    <tr> 
 
     <td>3</td> 
 
     <td>Banana</td> 
 
    </tr> 
 
    </tbody> 
 
</table> 
 
</div> 
 
<div style="float:left;width:48%;"> 
 
    <label>Table2</label> 
 
<table> 
 
    <thead style="background:green;"> 
 
    <tr> 
 
     <th>t1ID</th> 
 
     <th>Color</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody style="background:yellow;"> 
 
    <tr> 
 
     <td>1</td> 
 
     <td>Red</td> 
 
    </tr> 
 
    <tr> 
 
     <td>1</td> 
 
     <td>Green</td> 
 
    </tr> 
 
    <tr> 
 
     <td>3</td> 
 
     <td>Yellow</td> 
 
    </tr> 
 
    <tr> 
 
     <td>1</td> 
 
     <td>Red</td> 
 
    </tr> 
 
    </tbody> 
 
</table> 
 
</div>

我試圖創建一個連接也包含不同匹配的計數。

所以我要尋找設定這樣的結果:

<label>Results</label> 
 
<table> 
 
    <thead style="background:green;"> 
 
    <tr> 
 
     <th>ID</th> 
 
     <th>Name</th> 
 
     <th>ColorCount</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody style="background:yellow;"> 
 
    <tr> 
 
     <td>1</td> 
 
     <td>Apple</td> 
 
     <td>2</td> 
 
    </tr> 
 
    <tr> 
 
     <td>2</td> 
 
     <td>Orange</td> 
 
     <td>0</td> 
 
    </tr> 
 
    <tr> 
 
     <td>3</td> 
 
     <td>Banana</td> 
 
     <td>1</td> 
 
    </tr> 
 
    </tbody> 
 
</table>

我的基本查詢:

SELECT Table1.ID, Table1.Name, COUNT(DISTINCT Table2.Color) AS ColorCount FROM 
Table1 LEFT JOIN Table2 ON Table1.ID=Table2.t1ID 

然而,這僅返回的數據行如:

1 Apple 3 

以上是計算所有不同的顏色,而不是2紅(1)和1綠(1)(1 + 1)= 2;

它似乎強制查詢清除Table2中的所有值,而不是那些匹配連接條件的值。我在這裏敲我的頭。考慮到我的最終目標,我完全可以使用子查詢來實現這一目標,但如果我不需要將它們與連接一起使用,那就太棒了。

乾杯

回答

1

您可以使用GROUP BYLEFT JOIN

SELECT ID , T1.Name, COUNT(DISTINCT T2.Color) as ColorCount 
FROM Table1 T1 
LEFT JOIN Table2 T2 
ON T1.ID = T2.t1ID 
GROUP BY ID,T1.NAME 
+0

啊,赦免。我需要顏色的不同值。如果表2中有額外的1紅色,我會得到3的顏色計數結果。我會修改這個問題。 – Rooster 2014-10-16 18:17:17

+0

@Rooster,更新了答案,需要在COUNT – radar 2014-10-16 18:19:53

+0

內部添加DISTINCT,在所有Apple結果上返回1,表示ColorCount – Rooster 2014-10-16 18:23:24