首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

有三个表:表一是主表。表二、表三的字段不一样,但表二、表三中的cateid字段都是表一的id字段值。用join查询应该如何实现

2011-12-31 
有三个表:表一是主表。表二、表三的字段不一样,但表二、表三中的cateid字段都是表一的id字段值。用join查询应

有三个表:表一是主表。表二、表三的字段不一样,但表二、表三中的cateid字段都是表一的id字段值。用join查询应该怎么实现?
有三个表:表一是主表。表二、表三的字段不一样,但表二、表三中的cateid字段都是表一的id字段值。用join查询应该怎么实现?
表一:MasterDB
id   name
1     测试用表
2     信息中心
InfoDB
id   cateid   TitleCn
1     1                 信息标题1
1     1                 信息标题2
1     2                 信息标题3
1     1                 信息标题4
表二:ForumDB
id   cateid   TitleCn                             ContentCn
1     2                 BBS标题1                   测试内容a
1     1                 BBS标题2                   测试内容b
1     2                 BBS标题3                   测试内容c
1     1                 BBS标题4                   测试内容d

表三:查询结果
id   name                         InfoID   InfoCateID   InfoTitleCn         ContentCn
1     测试用表         1                     1                                     信息标题1           null
1     测试用表         1                     1                                     信息标题2           null
1     信息中心         1                     2                                     信息标题3           null
1     测试用表         1                     1                                     信息标题4           null
1     信息中心         1                     2                                     BBS标题1         测试内容a
1     测试用表         1                     1                                     BBS标题2         测试内容a
1     信息中心         1                     2                                     BBS标题3         测试内容a
1     测试用表         1                     1                                     BBS标题4         测试内容a



我用下面的这个语句查询只能得到一个表的数据:
SELECT
a.*,
b.id   AS   InfoID,b.CateID   AS   InfoCateID,   b.TitleCn   AS   InfoTitleCn,
c.id   AS   ForumID,c.CateID   AS   ForumCateID,c.TitleCn   AS   FormTitleCn,c.ContentCn   AS   ForumContentCn
FROM   MasterDB   a   RIGHT   OUTER   JOIN
            InfoDB   b   ON   a.id   =   b.CateID   FULL   OUTER   JOIN
            ForumDB   c   ON   a.id   =   c.CateID

一定要用join查询哦,不然我的其它功能没办法实现。

[解决办法]
--try

SELECT
a.*,
b.id AS InfoID,b.CateID AS InfoCateID, b.TitleCn AS InfoTitleCn,
c.id AS ForumID,c.CateID AS ForumCateID,c.TitleCn AS FormTitleCn,c.ContentCn AS ForumContentCn
FROM MasterDB a
left join InfoDB b ON a.id = b.CateID
left join ForumDB c ON a.id = c.CateID

[解决办法]
marco08的方法完全正确的。
SELECT
a.*,
b.id AS InfoID,b.CateID AS InfoCateID, b.TitleCn AS InfoTitleCn,
c.id AS ForumID,c.CateID AS ForumCateID,c.TitleCn AS FormTitleCn,c.ContentCn AS ForumContentCn
FROM MasterDB a
left join InfoDB b ON a.id = b.CateID
left join ForumDB c ON a.id = c.CateID
应该使用MasterDB为主表的左外联接才能得到正确的答案
MasterDB a
left join InfoDB b ON a.id = b.CateID
left join ForumDB c ON a.id = c.CateID

id name InfoID InfoCateID InfoTitleCn ForumID ForumCateID FormTitleCn ForumContentCn
----------- -------------------------------------------------- ----------- ----------- -------------------------------------------------- ----------- ----------- -------------------------------------------------- --------------------------------------------------
1 测试用表 1 1 信息标题1 1 1 BBS标题2 测试内容b
1 测试用表 1 1 信息标题1 1 1 BBS标题4 测试内容d
1 测试用表 1 1 信息标题2 1 1 BBS标题2 测试内容b
1 测试用表 1 1 信息标题2 1 1 BBS标题4 测试内容d
1 测试用表 1 1 信息标题4 1 1 BBS标题2 测试内容b
1 测试用表 1 1 信息标题4 1 1 BBS标题4 测试内容d
2 信息中心 1 2 信息标题3 1 2 BBS标题1 测试内容a
2 信息中心 1 2 信息标题3 1 2 BBS标题3 测试内容c


3 我的收藏 NULL NULL NULL NULL NULL NULL NULL

(9 row(s) affected)


[解决办法]
select a.id , a.name , isnull(b.字段, ' ') , isnull(c.字段, ' ') from 表一 a
left join 表二 b on a.id = b.id
left join 表三 c on a.id = c.id
[解决办法]
又被你们抢了沙发!@_@!

热点排行