【发布时间】:2015-08-17 22:07:57
【问题描述】:
在以下代码中:
SELECT ... FROM ... CROSS JOIN TABLE ... WHERE ...;
CROSS JOIN TABLE 是什么意思?
我在网上搜索过,但我只能找到关于 CROSS JOIN 的信息。
我想 CROSS JOIN TABLE 作用在一个表上,意思是这样的表:
CREATE OR REPLACE ... AS TABLE OF ...;
这是完整的查询:
SELECT prog.id_oct_prog_tran_a_participati, prog.code_ressource, prog.instant_depart, prog.commentaire, prog.en_hors_economie_de_comb, discr.delai, discr.valeur_point, MOD(delai, 60) AS H24
FROM req_prog prog
CROSS JOIN TABLE(POINTS_DISCRETS(pIdChronique=>id_chr_substitution)) discr
WHERE horizon <= 'J1'
AND delai > 0
ORDER BY id_oct_prog_tran_a_participati, instant_depart, horizon, delai
POINTS_DISCRETS 是一个返回 TYPE_TAB_POINT 类型元素的函数。 TYPE_TAB_POINT 是 DBA 创建的类型如下:
create or replace TYPE "TYPE_TAB_POINT" AS TABLE OF TYPE_POINT;
其中TYPE_POINT 是一个如下创建的类型:
create or replace TYPE "TYPE_POINT" AS OBJECT
(
ID_CHRONIQUE NUMBER,
HORIZON VARCHAR2(2),
NUM_POINT NUMBER(4),
DELAI NUMBER(5),
VALEUR_POINT FLOAT
);
因此,正如您在此处看到的,CROSS JOIN TABLE 作用于表,而不是我们通常在数据库中所指的表,更像是一个像数组一样的表。
是这样吗?而且,如果是的话,它怎么能被认为是一个真正的表?
【问题讨论】:
-
请发布我们的完整查询?
-
我编辑了我的问题。有什么想法吗?
-
不是
cross join table,而是带有table(..)表达式的cross join。