【问题标题】:Oracle SQL Update on Inner Join内部联接的 Oracle SQL 更新
【发布时间】:2014-06-09 14:12:15
【问题描述】:

今天早上我坚持了一些我更简单的事情。

我有以下问题,读数和夏令时有点疯狂。

我需要在下面设置 OLD = NEW。

select d.t0100 as tab1,
       t.t2400 as tab2
    from reportro.non_dst_readings d
        inner join reportro.dst_readings t
            on d.cust = t.cust
            and to_date(d.readdate_ndst, 'dd-mmm-yy') 
                 = (to_date(t.readdate, 'dd-mmm-yy') -1);

^^ 但是上面的选择不起作用,更不用说更新了。

我打算通过以下方式更新它们:

update (
select d.t0100 as tab1,
       t.t2400 as tab2
    from report.non_dst_readings d
        inner join report.dst_readings t
            on d.cust = t.cust
            on to_date(d.readdate_ndst, 'dd-mmm-yy') 
                 = (to_date(t.readdate, 'dd-mmm-yy') -1)
        )
 set old = new;

有什么想法吗?

再次感谢,如果没有 StackOverflow,我会迷路的 :)

【问题讨论】:

    标签: sql oracle inner-join dst


    【解决方案1】:

    NEW 是 Oracle 中的关键字,使用其他东西作为标识符。 还要更正 ON 语法,一个 JOIN 只能有一个 ON 子句

    update (
    select d.t0100 as oldVal ,
           t.t2400 as newVaL
        from report.non_dst_readings d
            inner join report.dst_readings t
                on d.cust = t.cust
                WHERE to_date(d.readdate_ndst, 'dd-mm-yyyy') 
                     = (to_date(t.readdate, 'dd-mm-yyyy') -1)
            )
     set oldVal = newVaL;
    

    【讨论】:

    • 感谢您的更新,但我仍然收到“ORA-01821:日期格式无法识别”,您是否认为这是 where 子句的问题,请假一天?
    • @BenCoughlan 正确的格式是 dd-mm-yyyy 而不是 dd-mmm-yy.check 已编辑答案
    • AAAH,正在使用 Caps,@m hasan 非常感谢! :D
    猜你喜欢
    • 2012-10-04
    • 2011-12-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多