一个主表,两个从表关联查询问题(只要能解决,分不够可以再加)

floadcloud 2008-10-12 07:25:38
长话短说
有一个主表A,两个从表B和C,B和C与A存在相同的主表键关联,我想通过一个视图查询出我所要的三个表中的所有信息,示例如下:
A
A_ID(主键) A_CODE A_NAME
1 001 张三

B
B_ID(主键) A_ID(外键) B_CODE B_NAME
1 1 001 王五

C
C_ID(主键) A_ID(外键) C_CODE C_NAME
1 1 001 李四
2 1 002 赵六

我想知道能不能通过一个视图查询出B中有一条关联记录和C中有两条关联记录,现在我建的视图查询出来的B有两条重复的记录,相当于B和C做了称得上笛卡尔积
请高手赐教!
...全文
279 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mantisXF 2008-10-13
  • 打赏
  • 举报
回复
这不能算是“重复”。符合条件的记录当然会被SELECT出来。如果LZ能把想要的结果也贴出来,这样解决问题会更快一点。[Quote=引用 4 楼 floadcloud 的回复:]
SELECT * FROM A,B,C where A.A_ID=B.A_ID and A.A_ID=C.A_ID

这样查出来的结果
A_ID B_CODE B_NAME C_CODE C_NAME
1 001 王五 001 李四
1 001 王五 002 赵六
B的记录重复了
[/Quote]
2021‘someday 2008-10-13
  • 打赏
  • 举报
回复
up
kennics80 2008-10-13
  • 打赏
  • 举报
回复
关注一下
ruihuahan 2008-10-13
  • 打赏
  • 举报
回复
楼主的意思好像是要先 Union B 和 C,把没有主外键关系的 B 表和 C 表的记录合并没有任何意义。






王帆 2008-10-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 floadcloud 的回复:]
SELECT * FROM A,B,C where A.A_ID=B.A_ID and A.A_ID=C.A_ID

这样查出来的结果
A_ID B_CODE B_NAME C_CODE C_NAME
1 001 王五 001 李四
1 001 王五 002 赵六
B的记录重复了
[/Quote]

没看懂,这两条结果不算重复吧?LZ想要什么样的结果?

如果不想有两条,那你可以用条件过滤一下后面两个字段。
wiler 2008-10-13
  • 打赏
  • 举报
回复
create or replace view v_abc as
select a_id,a_id,a_code,a_name from tab_a
union all
select b_id,a_id,b_code,b_name from tab_a a,tab_b b where a.a_id(+)=b.b_id
union all
select c_id,a_id,c_code,c_name from tab_a a,tab_c c where a.a_id(+)=c.c_id
liyongjie 2008-10-13
  • 打赏
  • 举报
回复
創建視圖:
CREATE VIEW abc_view
AS
SELECT c.* FROM c
WHERE c.a_id IN (SELECT b.a_id FROM b,a WHERE a.a_id = c.a_id)
liyongjie 2008-10-13
  • 打赏
  • 举报
回复
這是一個很簡單的SQL啊
這樣寫就可以啊:

SELECT c.* FROM c
WHERE c.a_id IN (SELECT b.a_id FROM b,a WHERE a.a_id = c.a_id)



floadcloud 2008-10-13
  • 打赏
  • 举报
回复
这样说吧,我就是想根据主表ID来查出B表与A表关联的一条数据和C表中关联的两条数据
BlueskyWide 2008-10-12
  • 打赏
  • 举报
回复
SELECT A.A_ID,distinct B_CODE,B_NAME,C_CODE,C_NAME FROM A,B,C where A.A_ID=B.A_ID and A.A_ID=C.A_ID;

floadcloud 2008-10-12
  • 打赏
  • 举报
回复
SELECT * FROM A,B,C where A.A_ID=B.A_ID and A.A_ID=C.A_ID

这样查出来的结果
A_ID B_CODE B_NAME C_CODE C_NAME
1 001 王五 001 李四
1 001 王五 002 赵六
B的记录重复了
BlueskyWide 2008-10-12
  • 打赏
  • 举报
回复
try it:

select B_CODE,C_CODE,count(c_id) from b,c where b.b_code=c.c_code and b.a_id=c.a_id
order by b_code,c_code
group by b_code,c_code
having count(c_id)=2;


[Quote=引用楼主 floadcloud 的帖子:]
长话短说
有一个主表A,两个从表B和C,B和C与A存在相同的主表键关联,我想通过一个视图查询出我所要的三个表中的所有信息,示例如下:
A
A_ID(主键) A_CODE A_NAME
1 001 张三

B
B_ID(主键) A_ID(外键) B_CODE B_NAME
1 1 001 王五

C
C_ID(主键) A_ID(外键) C_CODE C_NAME
1 1 001 李四
2 1 …
[/Quote]
minmin_god 2008-10-12
  • 打赏
  • 举报
回复
把 你的SQL贴出来看看
codearts 2008-10-12
  • 打赏
  • 举报
回复
一个视图包含A,B,C的内容,当然是2条了

B的a_id(值为1)对应C的a_id(值为1),join起来不就是2条?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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