• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

问个多表连接查询的问题

xueyhfeng 2006-07-14 10:04:21
有三个表,结构分别如下
A:
CommentID int ,
TopicID int ,
TopicType tinyint ,
Content ntext

B:
TopicID int,
Title nvarvhar(100)
C:
TopicID int ,
Title nvarchar(100)

其中A表的TopicID字段对应B,C表的TopicID字段,A表的TopicType字段用于区分TopicID字段是属于B表还是C表,

我现在要的查询效果是:
查询A表中的所有记录,与B,C表中对应的Title字段,并且A表中的TopicID,TopicType字段不发生重复。(其实也就是不产生重复的标题[Title])

...全文
138 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xueyhfeng 2006-07-17
已经搞定,使用了游标和表变量来读取临时数据,最后一次性返回结果集的方法,
回复
十一月猪 2006-07-14
不好意思 多了union
回复
十一月猪 2006-07-14
select TopicID ,
title
from
(select * from a
where topictype = 'B') tab1
inner join b on
tab1.title = b.title
union
select TopicID ,
title
from
(select * from a
where topictype = 'A') tab2
inner join C on
tab2.title = C.title
union
回复
xueyhfeng 2006-07-14
谢楼上的解决方案,怎样解决标题重复的问题呢,就是想只用TopicID和TopicType作为distinct的标准,但SQL SERVER好象不支持distinct on这样的语法,
回复
wgsasd311 2006-07-14
select distinct a.topicid,title=(case topictype when 'b' then b.title else c.title end)
from ta a left join tb b on a.topicid=b.topicid
left join tc c on a.topicid=c.topicid
回复
xueyhfeng 2006-07-14
我一直怀疑这样的数据库设计是有问题的,看起来省了一个表,但是这个表是完全没有必要省的,不过已经是这样了,怎么查才能得到上面的效果呢?
回复
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2006-07-14 10:04
社区公告
暂无公告