求多表视图的创建良方

shiweiwei 2003-08-24 07:10:59
表:
1、设备基本表(G_ID
SB_ID、SBName...
2、设备连接线关系表:
SB_ID、LJX_ID
3、连接线、线路关系表:
LJX_ID、XL_NBBM
4、线路基本表:
XL_NBBM、XL_NAME

要求:
创建‘设备线路关系表视图’(SB_ID、XL_Name....)
...全文
63 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiweiwei 2003-08-26
  • 打赏
  • 举报
回复
我想将设备附属设备表1,设备附属设备表2利用SQL建立一个序号字段如:

设备附属设备表1:
No SB_ID、FSSBID1
1 1 FSID1
2 1 FSID2
设备附属设备表2:
No SB_ID、FSSBID2
1 1 FSID3
2 1 FSID4

然后利用left join对附属设备表1,设备附属设备表2的No进行一次连接。理论上是可以解决排列问题的。但我不知道如何用SQL实现类似效果--我用的是DB2。

shiweiwei 2003-08-26
  • 打赏
  • 举报
回复
我把问题重新整理一下。


====背景资料
设备基本表
SB_ID、 SBName...
1 SBName1
设备附属设备表1:
SB_ID、FSSBID1
1 FSID1
1 FSID2
设备附属设备表2:
SB_ID、FSSBID2
1 FSID3
1 FSID4
======
以上,‘设备基本表’是‘设备附属设备表1’与‘设备附属设备表2’的
父表,而‘设备附属设备表1’与‘设备附属设备表2’之间没有关系。

希望用一个SQL得到
SB_ID FSSBID1 FSSBID2
1 FSID1 FSID3
1 FSID2 FSID4
××××××××××××××××××××××××××××
考虑到‘设备附属设备表1’或‘设备附属设备表2’均可能为空,所以使用了Left Join,
但出来结果为:

SB_ID FSSBID1 FSSBID2
1 FSID1 FSID3
1 FSID2 FSID4
1 FSID1 FSID4
1 FSID2 FSID3
结果进行了一次排列。
================
我的考虑:
将设备附属设备表1,设备附属设备表2利用SQL建立一个序号字段如:

设备附属设备表1:
No SB_ID、FSSBID1
1 1 FSID1
2 1 FSID2
设备附属设备表2:
No SB_ID、FSSBID2
1 1 FSID3
2 1 FSID4

然后利用left join对附属设备表1,设备附属设备表2的No进行一次连接。理论上是可以解决排列问题的。但我不知道如何用SQL实现类似效果--我用的是DB2。


《》》《》《》》《》求教!!!!!!!!!!!
madyak 2003-08-25
  • 打赏
  • 举报
回复
去除重复记录(MS SQL SERVER语法):
CREATE VIEW 设备线路关系表视图 AS
SELECT DISTINCT TOP 100 PERCENT
设备基本表.SB_ID,线路基本表.XL_NAME
FROM 设备基本表,设备连接线关系表,连接线线路关系表,线路基本表
WHERE 设备基本表.SB_ID=设备连接线关系表.SB_ID
AND 设备连接线关系表.LJX_ID=连接线线路关系表.LJX_ID
AND 连接线线路关系表.XL_NBBM=线路基本表.XL_NBBM

benny87 2003-08-25
  • 打赏
  • 举报
回复
create view 设备线路关系表视图 as
select a.sb_id,d.xl_name from 设备基本表 a,设备连接线关系表 b,连接线、线路关系表 c,线路基本表 d
where a.sb_id=b.sb_id and b.ljx_id=c.ljx_id and c.xl_nbbm=d.xl_nbbm

表名,视图名尽量不要用中文,有时会出错
benny87 2003-08-25
  • 打赏
  • 举报
回复
create view as
select a.sb_id,d.xl_name from 设备基本表 a,设备连接线关系表 b,连接线、线路关系表 c,线路基本表 d
where a.sb_id=b.sb_id and b.ljx_id=c.ljx_id and c.xl_nbbm=d.xl_nbbm
shiweiwei 2003-08-25
  • 打赏
  • 举报
回复
还有个问题--回答正确可以加分

设备基本表
SB_ID、 SBName...
1 SBName1
设备附属设备表1:
SB_ID、FSSBID1
1 FSID1
1 FSID2
设备附属设备表2:
SB_ID、FSSBID2
1 FSID3
1 FSID4

期望视图
SB_ID FSSBID1 FSSBID2
1 FSID1 FSID3
1 FSID2 FSID3
shiweiwei 2003-08-25
  • 打赏
  • 举报
回复
现在存在的问题不是不能创建视图,而是视图中数据可能会重复。

设备基本表
SB_ID、 SBName...
1 SBName1
设备连接线关系表:
SB_ID、LJX_ID
1 LJX1
1 LJX2
连接线、线路关系表:
LJX_ID、XL_NBBM
LJX1 XLNBBM1
LJX2 XLNBBM1
线路基本表:
XL_NBBM、XL_NAME
XLNBBM1 XLName

我希望的结果是:
设备线路关系表视图
SBID XL_Name
1 XLName
但用连接会出现重复记录
madyak 2003-08-25
  • 打赏
  • 举报
回复
设备附属设备表1,设备附属设备表2之间缺少关系
排序的问题好像不是很好解决!上述方法可能也会导致排序
madyak 2003-08-25
  • 打赏
  • 举报
回复
CREATE VIEW 期望视图 AS
SELECT DISTINCT TOP 100 PERCENT
A.SB_ID,A.FSSBID1,B.FSSBID2
FROM
(SELECT 设备基本表.SB_ID,设备附属设备表1.FSSBID1
FROM 设备基本表,备附属设备表1
WHERE 设备基本表.SB_ID=设备附属设备表1.SB_ID ) A,

(SELECT 设备基本表.SB_ID,设备附属设备表2.FSSBID2
FROM 设备基本表,设备附属设备表2
WHERE 设备基本表.SB_ID=设备附属设备表2.SB_ID) B
WHERE A.SB_ID=B.SB_ID
shiweiwei 2003-08-25
  • 打赏
  • 举报
回复
现在出来的结果是:

期望视图
SB_ID FSSBID1 FSSBID2
1 FSID1 FSID3
1 FSID2 FSID4
1 FSID1 FSID4
1 FSID2 FSID3

不重复但进行了一次排列,如何避免这个问题
madyak 2003-08-25
  • 打赏
  • 举报
回复
CREATE VIEW 期望视图 AS
SELECT DISTINCT TOP 100 PERCENT
设备基本表.SB_ID,设备附属设备表1.FSSBID1,设备附属设备表2.FSSBID2
FROM 设备基本表,备附属设备表1,设备附属设备表2
WHERE 设备基本表.SB_ID=设备附属设备表1.SB_ID AND 设备附属设备表1.SB_ID=设备附属设备表2.SB_ID

shiweiwei 2003-08-25
  • 打赏
  • 举报
回复
还有个问题--回答正确可以加分

设备基本表
SB_ID、 SBName...
1 SBName1
设备附属设备表1:
SB_ID、FSSBID1
1 FSID1
1 FSID2
设备附属设备表2:
SB_ID、FSSBID2
1 FSID3
1 FSID4

期望视图
SB_ID FSSBID1 FSSBID2
1 FSID1 FSID3
1 FSID2 FSID4
madyak 2003-08-24
  • 打赏
  • 举报
回复
CREATE VIEW 设备线路关系表视图 AS
SELECT 设备基本表.SB_ID,线路基本表.XL_NAME
FROM 设备基本表,设备连接线关系表,连接线线路关系表,线路基本表
WHERE 设备基本表.SB_ID=设备连接线关系表.SB_ID
AND 设备连接线关系表.LJX_ID=连接线线路关系表.LJX_ID
AND 连接线线路关系表.XL_NBBM=线路基本表.XL_NBBM
shiweiwei 2003-08-24
  • 打赏
  • 举报
回复
加分了!抢分了!
shiweiwei 2003-08-24
  • 打赏
  • 举报
回复
呼喊大侠
shiweiwei 2003-08-24
  • 打赏
  • 举报
回复
连续加了两个月班了,哪位大侠帮我搞定,睡觉都会感激你的!--分好商量
sixgj 2003-08-24
  • 打赏
  • 举报
回复
顶……

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧