带有子查询的 Oracle JOIN - 无效的 table 名称
Oracle JOIN with subqueries - invalid table name
我正在尝试从子选择中连接两个表,但它似乎不起作用。我收到错误 missing right parentheses
或 ORA-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 (
...
...
我正在尝试从子选择中连接两个表,但它似乎不起作用。我收到错误 missing right parentheses
或 ORA-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 (
...
...