在 Oracle 的 Where 子查询中使用别名或 table 名称,
Use an Alias or table name in Where Clause Subquery in Oracle,
我需要在我的查询中显示来自其他 table 的一些字段,但出现此错误:
ORA-00904: "THIS_"."ID": 标识符无效
00904. 00000 - “%s:无效标识符”
这是查询
SELECT this_."ID" as ID1_47_2_
FROM "ENSAIO_AMOSTRA" this_
inner join "ETAPA_FLUXO_AMOSTRA" efe1_ on this_."ID" = efe1_."ID_ENSAIO_AMOSTRA"
inner join "ETAPA" et2_ on efe1_."ID_ETAPA"=et2_."ID"
WHERE et2_."ID" in (5) and not (et2_."ID" = 6)
and this_."ID_ENSAIO" = 835
and efe1_."ID" = (
select y0_ from
( SELECT this_0_."ID" as y0_
FROM "ETAPA_FLUXO_AMOSTRA" this_0_
WHERE this_0_."ID_ENSAIO_AMOSTRA" = this_."ID"
ORDER BY this_0_."ID" desc )
)
如果我将 this_."ID" 更改为一个数字(一个已经存在的 ensaio_amostra),它将起作用。
我该怎么办?
and efe1_."ID" = (
select y0_ from
( SELECT this_0_."ID" as y0_
FROM "ETAPA_FLUXO_AMOSTRA" this_0_
WHERE this_0_."ID_ENSAIO_AMOSTRA" = this_."ID"
ORDER BY this_0_."ID" desc )
)
您不需要 子查询,因为您已经使用 INNER JOIN
子句连接表:
FROM "ENSAIO_AMOSTRA" this_
inner join "ETAPA_FLUXO_AMOSTRA" efe1_ on this_."ID" = efe1_."ID_ENSAIO_AMOSTRA"
只需使用:
SELECT this_."ID" AS ID1_47_2_
FROM "ENSAIO_AMOSTRA" this_
INNER JOIN "ETAPA_FLUXO_AMOSTRA" efe1_
ON this_."ID" = efe1_."ID_ENSAIO_AMOSTRA"
INNER JOIN "ETAPA" et2_
ON efe1_."ID_ETAPA" =et2_."ID"
WHERE et2_."ID" IN (5)
AND NOT (et2_."ID" = 6)
AND this_."ID_ENSAIO" = 835;
附带说明,子查询中的 ORDER BY
没有意义。此外,如果您在子查询中得到不止一行,它无论如何都会失败。
我需要在我的查询中显示来自其他 table 的一些字段,但出现此错误:
ORA-00904: "THIS_"."ID": 标识符无效 00904. 00000 - “%s:无效标识符”
这是查询
SELECT this_."ID" as ID1_47_2_
FROM "ENSAIO_AMOSTRA" this_
inner join "ETAPA_FLUXO_AMOSTRA" efe1_ on this_."ID" = efe1_."ID_ENSAIO_AMOSTRA"
inner join "ETAPA" et2_ on efe1_."ID_ETAPA"=et2_."ID"
WHERE et2_."ID" in (5) and not (et2_."ID" = 6)
and this_."ID_ENSAIO" = 835
and efe1_."ID" = (
select y0_ from
( SELECT this_0_."ID" as y0_
FROM "ETAPA_FLUXO_AMOSTRA" this_0_
WHERE this_0_."ID_ENSAIO_AMOSTRA" = this_."ID"
ORDER BY this_0_."ID" desc )
)
如果我将 this_."ID" 更改为一个数字(一个已经存在的 ensaio_amostra),它将起作用。
我该怎么办?
and efe1_."ID" = (
select y0_ from
( SELECT this_0_."ID" as y0_
FROM "ETAPA_FLUXO_AMOSTRA" this_0_
WHERE this_0_."ID_ENSAIO_AMOSTRA" = this_."ID"
ORDER BY this_0_."ID" desc )
)
您不需要 子查询,因为您已经使用 INNER JOIN
子句连接表:
FROM "ENSAIO_AMOSTRA" this_
inner join "ETAPA_FLUXO_AMOSTRA" efe1_ on this_."ID" = efe1_."ID_ENSAIO_AMOSTRA"
只需使用:
SELECT this_."ID" AS ID1_47_2_
FROM "ENSAIO_AMOSTRA" this_
INNER JOIN "ETAPA_FLUXO_AMOSTRA" efe1_
ON this_."ID" = efe1_."ID_ENSAIO_AMOSTRA"
INNER JOIN "ETAPA" et2_
ON efe1_."ID_ETAPA" =et2_."ID"
WHERE et2_."ID" IN (5)
AND NOT (et2_."ID" = 6)
AND this_."ID_ENSAIO" = 835;
附带说明,子查询中的 ORDER BY
没有意义。此外,如果您在子查询中得到不止一行,它无论如何都会失败。