【问题标题】:Oracle JOIN causing Invalid table nameOracle JOIN 导致无效的表名
【发布时间】:2021-10-16 06:33:50
【问题描述】:

我在下面有一个测试案例,我正在尝试将日程表与 schedule_assignment 表连接起来,这样我就可以在我的 CTE 中访问employee_id。当我运行下面的查询时,我得到一个错误。我可能在 JOIN 上做错了,但似乎无法让它工作。

ORA-00903: 无效的表名

任何帮助将不胜感激。提前感谢所有回答的人。

ALTER SESSION SET NLS_DATE_FORMAT = 'MMDDYYYY HH24:MI:SS';

     create table schedule_assignment(
       schedule_id number(4),
       schedule_date DATE,
       employee_id NUMBER(6)
  );

   insert into schedule_assignment(
          schedule_id,
          schedule_date,
          employee_id 
        )
       VALUES          (22,
TO_DATE('2021/08/23 00:00:00', 'yyyy/mm/dd hh24:mi:ss'),1);
  
       create table schedule(
       schedule_id NUMBER(4),
       location_id number(4),
       start_date DATE,
       end_date DATE,
          check (start_date=trunc(start_date,'MI')),
        check (end_date=trunc(end_date,'MI'))
      );

   
   insert into schedule(
     schedule_id,
     location_id,
     start_date,
     end_date 
     )
        VALUES     (22,1,TO_DATE('2021/08/23 11:00:00', 'yyyy/mm/dd hh24:mi:ss'),TO_DATE('2021/08/23 11:04:00', 'yyyy/mm/dd hh24:mi:ss'));

   insert into schedule(
        schedule_id,
         location_id,
         start_date,
         end_date 
       )
       VALUES      (22,2,TO_DATE('2021/08/23 11:10:00', 'yyyy/mm/dd hh24:mi:ss'),
TO_DATE('2021/08/23 11:13:00', 'yyyy/mm/dd hh24:mi:ss'));

    insert into schedule(
      schedule_id,
      location_id,
      start_date,
      end_date 
     )
       VALUES        (22,3,TO_DATE('2021/08/23 11:16:00', 'yyyy/mm/dd hh24:mi:ss'),TO_DATE('2021/08/23 11:19:00', 'yyyy/mm/dd hh24:mi:ss'));

   
WITH sch  AS
(

 SELECT 
   schedule_id,
   employee_id, 
   location_id,  
   start_date,
   end_date          
   FROM    schedule s
   JOIN ON
schedule_assignment sa
        s.schedule_id = sa.schedule_id AND     TRUNC(s.start_date) = sa.schedule_date
)
SELECT * from sch;

【问题讨论】:

  • FROM schedule s JOIN ON schedule_assignment sa 必须是:FROM schedule s JOIN schedule_assignment sa ON ...

标签: sql oracle join


【解决方案1】:

你有几个问题,所以我会在这里提供答案。 JOIN 问题和不明确的列引用,需要表前缀才能解决:

WITH sch AS (
       SELECT s.schedule_id
            , employee_id
            , location_id
            , start_date
            , end_date          
         FROM schedule s
         JOIN schedule_assignment sa
           ON s.schedule_id = sa.schedule_id
          AND TRUNC(s.start_date) = sa.schedule_date
     )
SELECT * from sch
;

【讨论】:

    猜你喜欢
    • 2021-03-19
    • 2013-07-09
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多