SQL如下:
SELECT T.*, C.FK_DEPT_ID, '' AS FK_BASE_ID
FROM T_BULLETIN_INFO T, T_BULLETIN_DEPT C
WHERE C.FK_BULLETION_ID = T.PK_ID
UNION
SELECT T.*, '' AS FK_DEPT_ID, B.FK_BASE_ID
FROM T_BULLETIN_INFO T, T_BULLETIN_BASE B
WHERE B.FK_BULLETION_ID = T.PK_ID
T_BULLETIN_INFO信息表有33条数据。T_BULLETIN_DEPT 部门表有90条数据。
T_BULLETIN_BASE 基表有300条数据。本来查询出来的信息本来最多是33条数据的,现在缺成了390条数据,而且检查了下sql也没有写错啊!这是为什么呢?
SELECT T.*, C.FK_DEPT_ID, '' AS FK_BASE_ID
FROM T_BULLETIN_INFO T, T_BULLETIN_DEPT C
WHERE C.FK_BULLETION_ID = T.PK_ID
UNION
SELECT T.*, '' AS FK_DEPT_ID, B.FK_BASE_ID
FROM T_BULLETIN_INFO T, T_BULLETIN_BASE B
WHERE B.FK_BULLETION_ID = T.PK_ID
T_BULLETIN_INFO信息表有33条数据。T_BULLETIN_DEPT 部门表有90条数据。
T_BULLETIN_BASE 基表有300条数据。本来查询出来的信息本来最多是33条数据的,现在缺成了390条数据,而且检查了下sql也没有写错啊!这是为什么呢?
第一个查询最多33条。
但是第2个查询最多也33条。
而且第一个查询和第2个查询几乎不可能发生重复。
要想看看为什么,就分别执行第一个查询和第2个查询。
你可以分别查一下SELECT T.*, C.FK_DEPT_ID, '' AS FK_BASE_ID
FROM T_BULLETIN_INFO T, T_BULLETIN_DEPT C
WHERE C.FK_BULLETION_ID = T.PK_ID
和
SELECT T.*, '' AS FK_DEPT_ID, B.FK_BASE_ID
FROM T_BULLETIN_INFO T, T_BULLETIN_BASE B
WHERE B.FK_BULLETION_ID = T.PK_ID就应该明白是为什么了
T_BULLETIN_BASE中 FK_BULLETION_ID可能就多个等于1的
这样就会出现多条记录
因为是进行的笛卡尔乘积
最后的结果不会超过他们的和