连接
非主键表时,无论使用何种连接(内联,外连,全联),查询结果的记录数量与每个被连接的非主键表的表连接列值重复的次数有关.所以,当连接的表是非主键表(如月表)时,由于非主键表的表连接列可能有重复值,必须注意连接该表导致的查询结果的记录数量变化.如果要求控制连接的非主键表的表连接列值唯一,可以将该非主键表放在一个子查询中进行汇总或使用group by子句处理.例如:
表Table1的表连接列为UID,主键
表Table2的表连接列为UID,非主键,月表(年度列和月份列),UID列值有重复.
Table1的记录:
UID
1
2
3
Table2的记录
UID 年度 月份
1 2006 3
2 2006 3
3 2006 3
4 2006 3
2 2006 3
查询Table1时连接Table2:
(一)未进行任何处理
SELECT a.UID FROM Table1 AS a INNER JOIN Table2 AS b ON a.UID = b.UID WHERE b.年度=2006 and b.月份=3
查询结果为:
UID
1
2
2
3
(二)使用Group by对表连接列进行处理
SELECT a.UID FROM Table1 AS a INNER JOIN (select UID from Table2 where 年度=2006 and 月份=3
group by UID) AS b ON a.UID = b.UID
查询结果为:
UID
1
2
3