簡體   English   中英

Oracle中子查詢的參考表

[英]Reference table from subquery in Oracle

我簡化了表格,但從本質上講,我有一個帶有cycle_no和結束日期的科目表。 該結束日期始終設置為該月的第一天,但​​是我需要通過查看日歷詳細信息表來獲取實際的結束日期。 實際結束日期是此cycle_no的下一個日期。

要創建簡化表並輸入幾行數據:

CREATE TABLE DATA_OWNER.ACCOUNT
(
  ACCNO     NUMBER(4),
  CYCLE_NO  NUMBER(4),
  ENDDATE   DATE
);

CREATE TABLE DATA_OWNER.CALENDAR_DETAILS
(
  CALENDAR_DT   DATE,
  BILL_CYCL_NO  NUMBER(4)
);

INSERT INTO calendar_Details
VALUES
('18/DEC/2017',
17);

INSERT INTO calendar_Details
VALUES
('23/DEC/2017',
20);

INSERT INTO calendar_Details
VALUES
('18/JAN/2018',
17);

INSERT INTO calendar_Details
VALUES
('23/JAN/2018',
20);

INSERT INTO calendar_Details
VALUES
('20/FEB/2018',
17);

INSERT INTO calendar_Details
VALUES
('21/FEB/2018',
20);

INSERT INTO account
VALUES
(1, 17, '01/DEC/2107');

INSERT INTO account
VALUES
(2, 20, '01/DEC/2107');

如果我們運行此查詢,盡管會得到“ ACC”。 “ ENDDATE”:無效的標識符:

SELECT accno, cycle_no, enddate, actual_date
FROM account acc
JOIN
(
  SELECT MIN(calendar_dt) actual_date
  FROM calendar_details cal
  WHERE calendar_dt > acc.enddate
)
ON acc.cycle_no = cal.bill_cycl_no;

誰能給我們一些實現這一目標的最佳方法的指點?

您不能在FROM中的子查詢中引用外部表引用。 只需使用相關的子查詢:

SELECT accno, cycle_no, enddate,
       (SELECT MIN(cal.calendar_dt) as actual_date
        FROM calendar_details cal
        WHERE cal.calendar_dt > acc.enddate AND acc.cycle_no = cal.bill_cycl_no
       ) as actual_date
FROM account acc;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM