Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 交叉联接和交叉联接表之间的区别是什么_Sql_Oracle_Join - Fatal编程技术网

Sql 交叉联接和交叉联接表之间的区别是什么

Sql 交叉联接和交叉联接表之间的区别是什么,sql,oracle,join,Sql,Oracle,Join,在以下代码中: SELECT ... FROM ... CROSS JOIN TABLE ... WHERE ...; 交叉联接表是什么意思 我在网上搜索过,但我能找到的只是交叉连接 我假设交叉联接表作用于一个表,意思是这样一个表: CREATE OR REPLACE ... AS TABLE OF ...; 以下是完整的查询: SELECT prog.id_oct_prog_tran_a_participati, prog.code_ressource, prog.instant_depa

在以下代码中:

SELECT ... FROM ... CROSS JOIN TABLE ... WHERE ...;
交叉联接表是什么意思

我在网上搜索过,但我能找到的只是交叉连接

我假设交叉联接表作用于一个表,意思是这样一个表:

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 
其中,
TYPE\u POINT
是按以下方式创建的类型:

create or replace TYPE "TYPE_TAB_POINT" AS TABLE OF 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
);
所以,正如您在这里看到的,
交叉连接表
作用于一个表,而不是我们通常在数据库中所说的表,更像是一个数组


是这样吗?如果是的话,它怎么能被认为是一个真正的表呢?

您对语句的分析不正确,我想这会让您感到困惑<代码>交叉连接表不是一个片段;它是一个
交叉连接
(但可以是任何连接类型),位于实际表
req\u prog
和单独的
表(…)
之间,用于告诉查询将函数调用的返回值视为一个表

表(…)
是:

通过表集合表达式,您可以通知Oracle集合表达式的值应作为表处理,以便进行查询和DML操作。集合表达式可以是子查询、列、函数或集合构造函数

这里的
POINTS\u DISCRETS
是集合构造函数-返回
TYPE\u TAB\u POINT
,这是一个集合,其中大部分是您已经计算出来的


在本例中,您的集合是一个对象表,将其视为一个表,这样您就可以连接并引用构成每个“行”的对象的属性,就像它是一列一样。
TABLE()
别名为
discr
,因此您可以参考
discr.delai
——其中
delai
类型点的属性之一。如果使用的是内部联接或外部联接,而不是交叉联接,则在联接条件中使用相同的构造,例如discr.x=prog.x上的
。应用表集合表达式后,只需在语句的其余部分将其视为一个表。

您对语句的分析不正确,我认为这会让您感到困惑<代码>交叉连接表
不是一个片段;它是一个
交叉连接
(但可以是任何连接类型),位于实际表
req\u prog
和单独的
表(…)
之间,用于告诉查询将函数调用的返回值视为一个表

表(…)
是:

通过表集合表达式,您可以通知Oracle集合表达式的值应作为表处理,以便进行查询和DML操作。集合表达式可以是子查询、列、函数或集合构造函数

这里的
POINTS\u DISCRETS
是集合构造函数-返回
TYPE\u TAB\u POINT
,这是一个集合,其中大部分是您已经计算出来的


在本例中,您的集合是一个对象表,将其视为一个表,这样您就可以连接并引用构成每个“行”的对象的属性,就像它是一列一样。
TABLE()
别名为
discr
,因此您可以参考
discr.delai
——其中
delai
类型点的属性之一。如果使用的是内部联接或外部联接,而不是交叉联接,则在联接条件中使用相同的构造,例如discr.x=prog.x上的
。应用表集合表达式后,只需在语句的其余部分将其视为表。

请发布我们的完整查询?我编辑了我的问题。有什么想法吗?它不是
交叉连接表
它是一个
交叉连接
,带有
表(…)
表达式。请发布我们的完整查询?我编辑了我的问题。有什么想法吗?它不是
交叉连接表
它是一个
交叉连接
,带有
表(…)
表达式。谢谢,完全理解!谢谢,完全理解!