求教一个联合查询的异常问题!!!!!

av168659700 2010-08-21 07:31:12
我有三个表,情况如下:

select A.*,B.列名,C.* from
A,
B,
C
where A.列名 in (select distinct(条件) from 表名 where 条件='XXXXXXXXXX')

结果查询出来的列都没有值,然后去掉C表:

select A.*,B.列名from
A,
B
where A.列名 in (select distinct(条件) from 表名 where 条件='XXXXXXXXXX')

结果查询出来就有值了!
==============
where A.列名 in (select distinct(条件) from 表名 where 条件='XXXXXXXXXX')
这个条件肯定是满足的!
======
请教为什么会出现这种情况??????????????????
...全文
129 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingkingzhu 2010-08-24
  • 打赏
  • 举报
回复
left join肯定可以搞定的
楼主补贴建表sql 和数据 懒得测试了
wwj0595 2010-08-24
  • 打赏
  • 举报
回复
我觉得9楼的等值连接查出来貌似也会没值,用AB的集合加个左(右)连接吧
「已注销」 2010-08-24
  • 打赏
  • 举报
回复
连接条件都没 没任何意义
fxianxian 2010-08-24
  • 打赏
  • 举报
回复
用左外连接
HuaIng 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wwj0595 的回复:]
我觉得9楼的等值连接查出来貌似也会没值,用AB的集合加个左(右)连接吧
[/Quote]
这个在c表为空的时候有值,当c表不为空的时候,如果没有符合条件的就没值了。
可以写一个存储过程,分条件

没有条件关联的多表查询。通常情况下都是禁止使用的。因为这样查询的结果会出现笛卡尔积。
当数据量过大时,查询效率会相当的低。

像我现在写程序的时候,如果出现这种,肯定是要挨批的。
HuaIng 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 av168659700 的回复:]
引用 1 楼 huaing 的回复:

你的C表是空的吧。。

对,我的C表是空的,但是A,B两表有值!我希望就算C表没值但是AB两个表的值也要出现应该怎么写呢?
[/Quote]

想到了一个办法,可以试试。先用a,b关联查询的集合再与c表进行外连接。如下:
select * (select A.*,B.列名 TX from
A,
B where A.列名 in (select distinct(条件) from 表名 where 条件='XXXXXXXXXX')
) tmp,C where tmp.TX = C.列名(+)(任意列
拎高 2010-08-23
  • 打赏
  • 举报
回复
三张表都应该有一个字段拿来关联的吧
连关联的字段都没有,何必这样呢
av168659700 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gelyon 的回复:]

select A.*,B.列名,nvl(C.列名,null) from
A,
B,
C
where A.列名 in (select distinct(条件) from 表名 where 条件='XXXXXXXXXX')
[/Quote]
如果我要查C.*怎么办?nvl(C.*,null)???
gelyon 2010-08-23
  • 打赏
  • 举报
回复
select A.*,B.列名,nvl(C.列名,null) from
A,
B,
C
where A.列名 in (select distinct(条件) from 表名 where 条件='XXXXXXXXXX')
av168659700 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tangren 的回复:]

没有列值?应该是没有记录吧。
如果关联查询没有记录,按你的情况,肯定是C表没有记录。
也就是说,如果A,B两个表关联,只要任一个表中没有记录,
即使没有任何关联条件,都不会查询出记录。
即:select * from a,b;是查询不到记录的!
[/Quote]
那我应该怎么做呢?
我希望联合查询的时候如果C表没值可以显示空,但是不能影响A,B表的值显示!
av168659700 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 huaing 的回复:]

你的C表是空的吧。。
[/Quote]
对,我的C表是空的,但是A,B两表有值!我希望就算C表没值但是AB两个表的值也要出现应该怎么写呢?
sunqiusong 2010-08-22
  • 打赏
  • 举报
回复
基础!!!
tangren 2010-08-21
  • 打赏
  • 举报
回复
没有列值?应该是没有记录吧。
如果关联查询没有记录,按你的情况,肯定是C表没有记录。
也就是说,如果A,B两个表关联,只要任一个表中没有记录,
即使没有任何关联条件,都不会查询出记录。
即:select * from a,b;是查询不到记录的!
HuaIng 2010-08-21
  • 打赏
  • 举报
回复
你的C表是空的吧。。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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