有三个表:表一是主表。表二、表三的字段不一样,但表二、表三中的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
[解决办法]
又被你们抢了沙发!@_@!