select buy_date ,
       null,
       product_name
from  buy_detail
union all 
select null,
       sell_date,
       product_name 
from  buy_detail ;大概是这样的格式,把一张入库表和出库表合并检索,对应的出库表没入库日期,入库表没出库日期,检索就用null来对应。在sqlserver2000查询正常,在oracle数据库上就错误,单表查询都正常的。试着用‘’来代替也不行。
同样的数值型、字符串型用union all 怎么对应才正确?万分紧急!!

解决方案 »

  1.   

    我的没问题。LZ能否贴表结构和一些数据。
    SQL> DESC TEST_DATE;
    Name     Type         Nullable Default Comments 
    -------- ------------ -------- ------- -------- 
    ADDTIME  DATE         Y                         
    A        NUMBER       Y                         
    B        NUMBER       Y                         
    C        NUMBER       Y                         
    TYPENAME VARCHAR2(3)  Y                         
    MYCOUNTS NUMBER(25,2) Y                         SQL> 
    SQL> SELECT A,
      2         NULL,
      3         B
      4    FROM TEST_DATE
      5  UNION ALL
      6  SELECT NULL,
      7         ADDTIME,
      8         B
      9    FROM TEST_DATE
     10   WHERE ROWNUM < 1;         A NULL                 B
    ---------- ----------- ----------
            20                     30
            10                     30
            11                     32
            12                     33
            13                     39
            25                     56
            36                     30
            20                     36
            20                     90
            30                     24
            13                     23
            15                     77
            55                     56
            33                     42
            44                     43
            33                     32
            26                     32
            76                     16
            19                     23
            21                     29         A NULL                 B
    ---------- ----------- ----------
            39                     2721 rows selectedSQL> 
      

  2.   

    --你的两个表名一样?
    select buy_date , 
           null sell_date, 
           product_name 
    from   buy_detail 
    union all 
    select null buy_date , 
           sell_date, 
           product_name 
    from   buy_detail 
      

  3.   

    谢谢回复!
    我的表里用null代替的有date型,也有数值型和字符型的,是否都能用null代替的?提示是:ora-01790:表达式必须具有与对应表达式相同的数据类型。
      

  4.   


    -- 我换成C和ADDTIME去UNION ALL就出错了,因为C列是NUMBER型而ADDTIME列是DATE型。应该你的表有同样的问题,两个字段数据类型不匹配。
    SQL> SELECT A,
      2         C,
      3         B
      4    FROM TEST_DATE
      5  UNION ALL
      6  SELECT NULL,
      7         ADDTIME,
      8         B
      9    FROM TEST_DATE
     10   WHERE ROWNUM < 1;SELECT A,
           C,
           B
      FROM TEST_DATE
    UNION ALL
    SELECT NULL,
           ADDTIME,
           B
      FROM TEST_DATE
     WHERE ROWNUM < 1ORA-01790: expression must have same datatype as corresponding expression
      

  5.   

    我的表里用null代替的有date型,也有数值型和字符型的      -- 这样当然会错。
    是否都能用null代替的     -- 如果符合需求的话,可以。
      

  6.   

    不是这个意思,两个表的类型是严格对应了的。只有date对应null,有实际字段的对应都是匹配的
      

  7.   

    我这是简化了的实际语句:
    select
    a.wpmc, 
    a.wpgg, 
    a.wpdw, 
    null 
    union all 
    select
    a.wpmc, 
    a.wpgg, 
    a.wpdw, 
    b.yssj 
    from a,b ;
    第四行的字段开始报错,删掉第四个字段没有问题,加上第四个就出类型问题,是date型。
      

  8.   

    sqlserver数据库的用户执行没问题,偏偏oracle的不能执行
      

  9.   

    所有的空值可以用0代替:select decode(buy_date,null,0,buy_date), 
           decode(sell_date,null,0,sell_date), 
           product_name 
    from   buy_detail; 
      

  10.   

    select 
    a.wpmc, --varchar2
    a.wpgg, --varchar2
    a.wpdw, --varchar2
    null,
    c.yssj  --date 
    from a,c 
    union all 
    select 
    a.wpmc, --varchar2
    a.wpgg, --varchar2
    a.wpdw, --varchar2
    b.yssj, --date  
    null 
    from a,b ; 
      

  11.   

    改一下:select 
    a.wpmc, --varchar2 
    a.wpgg, --varchar2 
    a.wpdw, --varchar2 
    decode(a.test1,null,0,a.test1), 
    decode(c.yssj,null,0,c.yssj), --date 
    from a,c where a.id=c.id      --是否要回条件?  
    union all 
    select 
    a.wpmc, --varchar2 
    a.wpgg, --varchar2 
    a.wpdw, --varchar2 
    decode(b.yssj,null,0,b.yssj), --date 
    decode(a.test2,null,0,a.test2)
    from a,b where a.id=b.id ;    --是否要回条件?
      

  12.   

    a.test1和b.test2和解?
    我这个null放在这里是因为相应表无对应字段,填个空补位的
      

  13.   

    小弟的客户群大部分是用sqlserver做后台数据库,小部分用oracle,所以oracle严重不懂
    刚才用sqlplus查一些数据想粘出来,结果一直在慢慢滚数据,煞不了车(远程连着客户的破机器...)。请问怎么途中终止检索?
    小弟一般用pb的查询器做查询,这个用不来。
      

  14.   

    select 
    a.wpmc, --varchar2 
    a.wpgg, --varchar2 
    a.wpdw, --varchar2 
    null, 
    c.yssj  --date 
    from a,c 
    union all 
    select 
    a.wpmc, --varchar2 
    a.wpgg, --varchar2 
    a.wpdw, --varchar2 
    b.yssj, --date  
    null 
    from a,b ; -- 这个语句应该没错的,如果有问题应该是数据的问题。
      

  15.   

    试下面的SQL, Oracle的数据类型要通过函数转换:
    select buy_date , 
          to_date(null) sell_date, 
          product_name 
    from  buy_detail 
    union all 
    select to_date(null) buy_date, 
          sell_date, 
          product_name 
    from  buy_detail ; 
      

  16.   

    直接在sqlplus里DESC TABLE_NAME;就可以看表结构加上表结构和数据就可以确定问题了。
      

  17.   

    shutdown your machine. :-)
      

  18.   

    select to_char(buy_date,'yyyy-mm-dd')  buy_date, 
          '' sell_date, 
          product_name 
    from  buy_detail 
    union all 
    select '' buy_date, 
         to_char(sell_date,'yyyy-mm-dd') ,
          product_name 
    from  buy_detail ;可以否?