连接
非主键表时,无论使用何种连接(内联,外连,全联),查询结果的记录数量与每个被连接的非主键表的表连接列值重复的次数有关.所以,当连接的表是非主键表(如月表)时,由于非主键表的表连接列可能有重复值,必须注意连接该表导致的查询结果的记录数量变化.如果要求控制连接的非主键表的表连接列值唯一,可以将该非主键表放在一个子查询中进行汇总或使用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
相关文章
- 表连接查询(2-n)
- 2、Java应用中常见的JDBC连接字符串(SQLite、MySQL、Oracle、Sybase、SQLServer、DB2)
- SQLSERVER2008R2数据库的整体导出及单个表的导出步骤
- win 下python2.7 pymssql连接ms sqlserver 2000
- sqlserver2008r2通过数据库引擎连接服务器失败怎么做
- 利用Sqlserver的CDC功能实现2张表的同步更新
- 集算器连接 sqlserver2008R2 数据库报错:驱动程序无法通过使用安全套接字层
- vs 连接sqlserver 2008 R2 报 provider:SSL Provider, error: 0 - 等待的操作过时
- sqlserver 如何备份或恢复一个表_MS SQL Server
- Sqlserver 连接oracle和mysql数据库 已经oracle导入sqlserver表数据