我有一个名为'svc_id_value'的数据库字段,其中包含字母数字值和整数值。
我有一个查询来搜索与此服务ID相关的详细信息。当我的输入变量是一个整数时,查询工作正常,但是当我尝试使用字母数字字符串进行相同的查询时,结果将返回空。问题VARCHAR2(30Byte)中的字段(svc_id_value)。我可以在数据视图中成功过滤Oracle SQL Developer中的字母数字变量,但是当我在SQL Developer中查询它时,结果会变回空白。
工作查询(字符串为整数 - 搜索s.svc_id_value ='555555'):
SELECT *
from svc s, status_types stat, service_types st,
billing_types bt, account ax, building pp, locations ll,
ref_countries cx
WHERE
s.svc_status = stat.status_type
and stat.tablename='service'
and s.svc_type = st.service_type
and s.svc_billing_type = bt.billing_type
and ax.account_id = s.svc_account_id
and pp.bldg_id = s.svc_bldg_id
and ll.location_id = s.svc_location_id
and cx.id = ll.country_id
and s.svc_id_value ='555555';
非工作查询(字符串为字母数字 - 搜索s.svc_id_value ='88888888-ABC'):
SELECT *
from svc s, status_types stat, service_types st,
billing_types bt, account ax, building pp, locations ll,
ref_countries cx
WHERE
s.svc_status = stat.status_type
and stat.tablename='service'
and s.svc_type = st.service_type
and s.svc_billing_type = bt.billing_type
and ax.account_id = s.svc_account_id
and pp.bldg_id = s.svc_bldg_id
and ll.location_id = s.svc_location_id
and cx.id = ll.country_id
and s.svc_id_value ='88888888-ABC';
要确认通过字母数字变量查询是否有效,以下简单查询会成功返回结果:
SELECT * from svc s WHERE s.svc_id_value='88888888-ABC'
我不明白为什么查询可以使用整数,但是当它是字母数字时失败。
有什么想法吗?
答案 0 :(得分:0)
要解决此类问题,我将所有内部联接更改为外部联接,如下所示:
SELECT *
from svc s
LEFT JOIN status_types stat
ON s.svc_status = stat.status_type
AND stat.tablename='service'
LEFT JOIN service_types st
ON s.svc_type = st.service_type
LEFT JOIN billing_types bt
ON s.svc_billing_type = bt.billing_type
LEFT JOIN account ax
ON ax.account_id = s.svc_account_id
LEFT JOIN building pp
ON pp.bldg_id = s.svc_bldg_id
LEFT JOIN locations ll
ON ll.location_id = s.svc_location_id
LEFT JOIN ref_countries cx
ON cx.id = ll.country_id
WHERE s.svc_id_value ='88888888-ABC';
这样,您应该返回一行,然后您可以浏览结果。至少有一个连接表将具有空值,这就是您在原始内连接查询中返回零行的原因。