鉴于以下两个表:
<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>
&#13;
我正在尝试创建一个包含不同匹配项的连接。
所以我正在寻找这样的结果集:
<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>
&#13;
我的基本查询是:
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;
看来,distinct是强制查询区分Table2中的所有值,而不是那些与连接条件匹配的值。我在这里砰的一声。考虑到我的最终目标,我绝对可以使用子查询实现这一目标,但如果我不需要与联接一起使用它们,那就太棒了。
干杯
答案 0 :(得分:1)
您可以使用GROUP BY
和LEFT 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