【问题标题】:Missing Expression缺少表达
【发布时间】:2014-11-10 18:19:00
【问题描述】:

我有 2 张表,其中一张只包含日期,例如

table1:从日期中选择 display_date; --将显示整个月份的日期(01-31)

____________________________
display_date
___________________

01-OCT-14
02-OCT-14
03-OCT-14
.....SO ON

table2:从employee_Day 中选择display_date、weekday、day、month -- 这包含一些月份的日期(01、04、05 等)。它不会包含所有日期

______________________________________________
|display_date   |  weekday   | day  |  month  |
-----------------------------------------------
01-OCT-14          7           01       10
04-OCT-14          5           04       10
_______________________________________________

我需要加入这两个表,我必须得到所有日期的输出和我需要输出的记录的空值,如下所示

_____________________________________________
display_date   |   weekday |  day   | month   |
_______________________________________________

01-OCT-14         7           01      10
02-OCT-14         5           02      10
03-OCT-14         4           03      10    



select a.display_date, b.weekday, b.day, b.month from (subquery1) a, (subquery2) b where TO_CHAR(TO_DATE(a.DISPLAY_DATE,'DD-MON-RR'),'DD')= TO_CHAR(b.DAY_NUMBER)(+);

subquery1:选择第一个表值

subquery2 : 获取 secong 表值

我收到了缺少表达式错误。

如果表 2 中没有 display_date 的值,我需要在 DISPLAY_DATE 列中获取常用值,然后它必须加入表 1 的结果。 我不能使用联合,因为表 1 和 2 上的列不同 有什么想法吗?

【问题讨论】:

    标签: sql oracle oracle11g oracle10g


    【解决方案1】:

    你需要使用left join

    SELECT d.display_date, e.weekday, e.day, e.month 
    FROM Dates d
    LEFT JOIN employee_Day e
    ON d.display_date = e.display_date
    

    【讨论】:

    • 嘿@RADAR 我还有一个问题。如何将大字符串传递给存储过程?当我使用 clob 时,它会抛出标识符太长的错误
    • @user3707681,我不确定这个问题,因为我是 oracle 新手,可能需要作为另一个问题提出
    【解决方案2】:

    我想你需要这样的东西:

    select a.display_date,
           nvl(b.weekday, to_char(a.display_date, 'D')) weekday,
           nvl(b.day, to_char(a.display_date, 'DD')) day,
           nvl(b.month, to_char(a.display_date, 'MM')) month
    from table1 a left join table2 b on a.display_date = b.display_date
    order by a.display_date;
    

    Oracle 建议避免使用 of (+),因为它已被删除。

    NVL(expr1, expr2) = 如果 expr1 为空则 expr2 否则 expr1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多