oracle 查询时报 ORA-01722: 无效数字 错误

我有个SQL语句,子查询里如果只有一个条件就不会报错,但是两条放在一起就有问题。1、执行整个SQL报错,说无效数字:selecta.subjidfromHADSawher... 我有个SQL语句,子查询里如果只有一个条件就不会报错,但是两条放在一起就有问题。
1、执行整个SQL报错,说无效数字:
select a.subjid from HADS a where a.HADSSN>=8 and (select count(*) from HA where subjid=a.subjid and HAMDSN is null)>0;

2、单独执行任一个子查询则不会报错。如
select a.subjid from HADS a where a.HADSSN>=8 and (select count(*) from HA where subjid=a.subjid )>0;



select a.subjid from HADS a where a.HADSSN>=8 and (select count(*) from HA where HAMDSN is null )>0;

都不会报错,加在一起就报错,请高手指点,如果正确,我倾分感谢!
subjid 为字符型。
HAMDSN 为字符型
展开
 我来答
17号观察室
推荐于2017-09-22 · TA获得超过5730个赞
知道大有可为答主
回答量:3666
采纳率:66%
帮助的人:1342万
展开全部
楼主的问题 其实很明显 你的第一条语句是表HADS 和where后面的的表HA 做了关联

我仔细看了一下你的条件 最终外面的查询where结果是where null>8 and 0>0 那么这个条件肯定会报错的,不是条件合在一起报错 。
第二条语句 没有指定HAMDSN is null ,所以没有问题

第三条语句 虽然指定了HAMDSN is null , 但面的表和外面的表没有关系,所以也没有问题
注:sql语句如果没有特指的话 后面的where会自动过滤掉了null(因为默认情况下 null不参与运算的 这个楼主应该知道) 所以就不会报错
不明白可以再问我
追问
感谢你的回答。
但是 select a.subjid from HADS a where a.HADSSN>=8 and 0>0 是可以运行的。

select a.subjid from HADS a where null>=8 and 0>0 也是可以运行的。
追答

我知道啊 这个肯定是可以的 因为你这个没有指定  HAMDSN is null  所以会自动过滤掉了null

你的那个不行是因为你内表和外表关联了 而且指定了 HAMDSN is null  所以肯定会报错

你好好看看我上面给你分析的 不明白再问我 

百度网友13eda02
2013-06-05 · TA获得超过778个赞
知道小有建树答主
回答量:1048
采纳率:77%
帮助的人:377万
展开全部

语法不允许、这样实现:

select a.subjid from HADS a
where  a.HADSSN>=8 
and exists(select 1 from HA where subjid=a.subjid and HAMDSN is null);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
87...1@qq.com
2013-06-07
知道答主
回答量:11
采纳率:0%
帮助的人:1.6万
展开全部
select a.subjid from HADS a where a.HADSSN>=8 and (select count(*) from HA where subjidfrom HA where HAMDSN is null )>0;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式