日期:2014-05-17  浏览次数:20790 次

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
----------
1
SQL> select * from t1 where t1.str in (select t2.str from t2);  --没有结果
 
STR
----------

------解决方案--------------------
嗯,呵呵,可能是空格之类问题...楼主 用 SELECT trim(abcode) FROM Q2008 where gcode='CLC2' 试下。