当前位置: 代码迷 >> Oracle开发 >> oracle in接sql语句的有关问题
  详细解决方案

oracle in接sql语句的有关问题

热度:46   发布时间:2016-04-24 07:31:27.0
oracle in接sql语句的问题
语句如
  SELECT COUNT(*) FROM Q2002 A LEFT JOIN Q2003 B ON A.SE2001 = B.SE2001 AND B.AYPE = a.FMAL 
  WHERE B.code IN(SELECT abcode FROM Q2008 where gcode='CLC2') 
上面这语句出来的数据显示是0,结果错误,应该是没查出数据
 SELECT COUNT(*) FROM Q2002 A LEFT JOIN Q2003 B ON A.SE2001 = B.SE2001 AND B.AYPE = a.FMAL 
  AND B.code IN(0305,0502,0501,0419,0605,1002,0904,0702,0810) 
这数据时正确的,显示88条,
不知道是啥原因,请大牛们帮忙。。。。

------解决方案--------------------
测试数据:
SQL code
CREATE TABLE T165(    ID NUMBER(4),    F1 VARCHAR2(20));INSERT INTO T165 VALUES(1, 'A');INSERT INTO T165 VALUES(2, 'B');INSERT INTO T165 VALUES(3, 'C');INSERT INTO T165 VALUES(4, 'D');CREATE TABLE T166(    ID NUMBER(4),    F2 VARCHAR2(20));INSERT INTO T166 VALUES(1, 'AA');INSERT INTO T166 VALUES(2, 'BB');INSERT INTO T166 VALUES(3, 'CC');INSERT INTO T166 VALUES(4, 'DD');
------解决方案--------------------
SQL code
除了你“SELECT abcode FROM Q2008 where gcode='CLC2'”  这个语句查询没内容,否则应该一样的
------解决方案--------------------
WHERE B.code IN(SELECT abcode FROM Q2008 where gcode='CLC2')
这句话,看看是不是abcode带有空格,造成b.code不在abcode中。

IN(0305,0502,0501,0419,0605,1002,0904,0702,0810) 没带有空格
------解决方案--------------------
会不会字段类型的问题?
SQL code
create table t1(str varchar2(10)); ----str用varchar2类型insert into t1 values ('1');commit;create table t2(str char(10));  --str用char类型insert into t2 values ('1');commit;SQL> select * from t1 where t1.str in ('1');   --可以查出结果 STR----------1SQL> select * from t1 where t1.str in (select t2.str from t2);  --没有结果 STR----------
------解决方案--------------------
嗯,呵呵,可能是空格之类问题...楼主 用 SELECT trim(abcode) FROM Q2008 where gcode='CLC2' 试下。

  相关解决方案