带有子查询的 Oracle JOIN - 无效的 table 名称

Oracle JOIN with subqueries - invalid table name

我正在尝试从子选择中连接两个表,但它似乎不起作用。我收到错误 missing right parenthesesORA-00903 Invalid Table Name。 我是 Oracle 的新手,我不太清楚错误的确切位置。这两个查询在没有连接的情况下也能正常工作,但是当我添加连接时它们就不起作用了。

SELECT * FROM (
    SELECT Fallnr, MIN(Ende) AS Entlassung, Station FROM (
        SELECT Fallnr, Station, LAG(Station, 1) OVER (ORDER BY Beginn) AS Prev_Stat, LEAD(Station, 1) OVER (ORDER BY Beginn) AS Next_Stat, Beginn, Ende FROM (  
            SELECT
                f.FALLNR AS Fallnr,
                vfs.GUELTIG_AB AS Beginn,
                vfs.GUELTIG_BIS AS Ende,
                o.OEBENENAME AS Station
            FROM
                FALL f 
                INNER JOIN V_FALL_STATION vfs ON vfs.FALLID = f.FALLID
                INNER JOIN ORGAEBENE o ON O.OEBENEID = vfs.OEBENEID 
            WHERE
                o.BS_PERSNR = 100000
            ORDER BY Beginn, Ende
        )
        WHERE REGEXP_LIKE(Station, '^Intensivstation I$|(Stat)')
    )
    WHERE Station = 'Intensivstation I' AND REGEXP_LIKE(Next_Stat, '(Stat)') 
    GROUP BY Fallnr, Station
) t1
INNER JOIN 
SELECT * FROM (
    SELECT Fallnr, MIN(Beginn) AS Wiederaufnahme FROM (
        SELECT Fallnr, Station, LAG(Station, 1) OVER (ORDER BY Beginn) AS Prev_Stat, LEAD(Station, 1) OVER (ORDER BY Beginn) AS Next_Stat, Beginn, Ende FROM (  
            SELECT
                f.FALLNR AS Fallnr,
                vfs.GUELTIG_AB AS Beginn,
                vfs.GUELTIG_BIS AS Ende,
                o.OEBENENAME AS Station
            FROM
                FALL f 
                INNER JOIN V_FALL_STATION vfs ON vfs.FALLID = f.FALLID
                INNER JOIN ORGAEBENE o ON O.OEBENEID = vfs.OEBENEID 
            WHERE
                o.BS_PERSNR = 100000
            ORDER BY Beginn, Ende
            )
            WHERE REGEXP_LIKE(Station, '^Intensivstation I$|(Stat)') 
        )
    WHERE Station = 'Intensivstation I' AND REGEXP_LIKE(Prev_Stat, '(Stat)') 
    GROUP BY Fallnr, Station
) t2 ON t2.FALLNR = t1.FALLNR

有什么想法是我的错误所在,或者我如何以更好的方式来避免错误?

提前致谢!

你不能

INNER JOIN SELECT ...

那个SELECT应该是一个子查询,例如

INNER JOIN (SELECT ...)

像这样:

SELECT *
  FROM (  SELECT Fallnr, MIN (Ende) AS Entlassung, Station
            FROM (SELECT Fallnr,
                         Station,
                         LAG (Station, 1) OVER (ORDER BY Beginn) AS Prev_Stat,
                         LEAD (Station, 1) OVER (ORDER BY Beginn) AS Next_Stat,
                         Beginn,
                         Ende
                    FROM (  SELECT f.FALLNR AS Fallnr,
                                   vfs.GUELTIG_AB AS Beginn,
                                   vfs.GUELTIG_BIS AS Ende,
                                   o.OEBENENAME AS Station
                              FROM FALL f
                                   INNER JOIN V_FALL_STATION vfs
                                      ON vfs.FALLID = f.FALLID
                                   INNER JOIN ORGAEBENE o
                                      ON O.OEBENEID = vfs.OEBENEID
                             WHERE o.BS_PERSNR = 100000
                          ORDER BY Beginn, Ende)
                   WHERE REGEXP_LIKE (Station, '^Intensivstation I$|(Stat)'))
           WHERE     Station = 'Intensivstation I'
                 AND REGEXP_LIKE (Next_Stat, '(Stat)')
        GROUP BY Fallnr, Station) t1
       INNER JOIN
       (SELECT *
          FROM (  SELECT Fallnr, MIN (Beginn) AS Wiederaufnahme
                    FROM (SELECT Fallnr,
                                 Station,
                                 LAG (Station, 1) OVER (ORDER BY Beginn)
                                    AS Prev_Stat,
                                 LEAD (Station, 1) OVER (ORDER BY Beginn)
                                    AS Next_Stat,
                                 Beginn,
                                 Ende
                            FROM (  SELECT f.FALLNR AS Fallnr,
                                           vfs.GUELTIG_AB AS Beginn,
                                           vfs.GUELTIG_BIS AS Ende,
                                           o.OEBENENAME AS Station
                                      FROM FALL f
                                           INNER JOIN V_FALL_STATION vfs
                                              ON vfs.FALLID = f.FALLID
                                           INNER JOIN ORGAEBENE o
                                              ON O.OEBENEID = vfs.OEBENEID
                                     WHERE o.BS_PERSNR = 100000
                                  ORDER BY Beginn, Ende)
                           WHERE REGEXP_LIKE (Station,
                                              '^Intensivstation I$|(Stat)'))
                   WHERE     Station = 'Intensivstation I'
                         AND REGEXP_LIKE (Prev_Stat, '(Stat)')
                GROUP BY Fallnr, Station)) t2
          ON t2.FALLNR = t1.FALLNR

你有额外的SELECT * FROM.你需要删除它,一切都会正常。

...
...
    WHERE Station = 'Intensivstation I' AND REGEXP_LIKE(Next_Stat, '(Stat)') 
    GROUP BY Fallnr, Station
) t1
INNER JOIN 
--SELECT * FROM -- just remove this  
(
    SELECT Fallnr, MIN(Beginn) AS Wiederaufnahme FROM (
...
...