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_Oracle11g - Fatal编程技术网

Sql 查询正在提供笛卡尔连接

Sql 查询正在提供笛卡尔连接,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有下面的查询,它返回大约65000行 如果上面的with子句查询我在现有的大查询中使用了两次,那么我如何在不使用with子句的情况下进行同样的操作呢。我在下面做了,但它不起作用。 任何最小的建议都将不胜感激 我使用了两次with子句查询变量。由于某些原因,我必须删除with子句并重新创建查询。因为这个变量已经用不同的别名引用了两次,所以我在下面写下了查询,并用不同的别名使用了两次表 select count(*) from( SELECT k.inventory

我有下面的查询,它返回大约65000行

如果上面的with子句查询我在现有的大查询中使用了两次,那么我如何在不使用with子句的情况下进行同样的操作呢。我在下面做了,但它不起作用。 任何最小的建议都将不胜感激

我使用了两次with子句查询变量。由于某些原因,我必须删除with子句并重新创建查询。因为这个变量已经用不同的别名引用了两次,所以我在下面写下了查询,并用不同的别名使用了两次表

   select count(*) from(  SELECT
            k.inventory_item_id        AS inventory_item_id,
            k.organization_id          AS organization_id,
            k.primary_uom_code         AS primary_uom_code,
            k.concatenated_segments    AS concatenated_segments,
            t.description              AS description,
            t.language                 AS language
        FROM
            mtl_system_items_b_kfv  k,
            mtl_system_items_b_kfv k1,
            mtl_system_items_tl     t,
            mtl_system_items_tl     t1
        WHERE 
               k.inventory_item_id = t.inventory_item_id and
               k1.inventory_item_id = t1.inventory_item_id AND
           k.organization_id = t.organization_id and
            k1.organization_id = t1.organization_id 
            );
这也应该是65k的记录,但它提供了大约840k的记录。我的连接条件正确吗?我需要与with子句查询相同的输出

基本上,我必须参考这两张表两次

非常感谢您的建议。

您已经加入了k和t,您也加入了k1和t1,但您还没有将这两对连接在一起,因此它们正在创建交叉连接,您的查询有效:

选择计数* 从…起 选择k.存货\项目\标识作为存货\项目\标识, k、 组织id作为组织id, k、 主计量单位代码作为主计量单位代码, k、 连接的_段作为连接的_段, t、 描述作为描述, t、 作为语言的语言 来自mtl_系统_项目_b_kfv k 内部连接mtl\u系统\u项目\u TLT 在k.inventory\u item\u id=t.inventory\u item\u id上 k.organization\u id=t.organization\u id 交叉连接mtl_系统_项目_b_kfv k1 内部连接mtl\u系统\u项目\u tl t1 在k1.inventory\u item\u id=t1.inventory\u item\u id上 k1.organization\u id=t1.organization\u id ; 您需要了解如何关联k/t对和k1/t1对,并将交叉连接更改为内部连接。然而,您的问题中没有足够的信息让我们告诉您如何做到这一点;您将需要确定要关联的列

比如:

选择计数* 从…起 选择k.存货\项目\标识作为存货\项目\标识, k、 组织id作为组织id, k、 主计量单位代码作为主计量单位代码, k、 连接的_段作为连接的_段, t、 描述作为描述, t、 作为语言的语言 来自mtl_系统_项目_b_kfv k 内部连接mtl\u系统\u项目\u TLT 在k.inventory\u item\u id=t.inventory\u item\u id上 k.organization\u id=t.organization\u id 内部连接mtl\U系统项目\U b\U kfv k1-更改为内部 在k.some_column=k1.some_column上-添加了连接条件 内部连接mtl\u系统\u项目\u tl t1 在k1.inventory\u item\u id=t1.inventory\u item\u id上 k1.organization\u id=t1.organization\u id t.some_other_column=t1.some_other_column-添加了一个连接条件 ; 我使用了两次with子句查询变量。由于某些原因,我必须删除with子句并重新创建查询

当您应该解决原始问题,而不是试图绕过第一个问题来解决次要问题时,这似乎是一个XY问题。我的建议是解决如何绕过这个限制,这样您只需要查询表一次,就可以避免自联接;但是,同样,您没有提供任何详细信息,因此我们无法提供任何帮助建议。

您加入了k和t,您也加入了k1和t1,但您没有将这两对连接在一起,因此它们正在创建交叉连接,您的查询有效:

选择计数* 从…起 选择k.存货\项目\标识作为存货\项目\标识, k、 组织id作为组织id, k、 主计量单位代码作为主计量单位代码, k、 连接的_段作为连接的_段, t、 描述作为描述, t、 作为语言的语言 来自mtl_系统_项目_b_kfv k 内部连接mtl\u系统\u项目\u TLT 在k.inventory\u item\u id=t.inventory\u item\u id上 k.organization\u id=t.organization\u id 交叉连接mtl_系统_项目_b_kfv k1 内部连接mtl\u系统\u项目\u tl t1 在k1.inventory\u item\u id=t1.inventory\u item\u id上 k1.organization\u id=t1.organization\u id ; 您需要了解如何关联k/t对和k1/t1对,并将交叉连接更改为内部连接。然而,您的问题中没有足够的信息让我们告诉您如何做到这一点;您将需要确定要关联的列

比如:

选择计数* 从…起 选择k.存货\项目\标识作为存货\项目\标识, k、 组织id作为组织id, k、 主计量单位代码作为主计量单位代码, k、 连接的_段作为连接的_段, t、 描述作为描述, t、 作为语言的语言 来自mtl_系统_项目_b_kfv k 内部连接mtl\u系统\u项目\u TLT 在k.inventory\u item\u id=t.inventory\u item\u id上 k.organization\u id=t.organization\u id 内部连接mtl\U系统项目\U b\U kfv k1-更改为内部 在k.some_column=k1.some_column上-添加了连接条件 内部连接mtl\u系统\u项目\u tl t1 在k1.inventory\u item\u id=t1.inventory\u item\u id上 k1.organization\u id=t1.organization\u id t.some_other_column=t1.some_other_column-添加了一个连接条件 ; 我使用了两次with子句查询变量。由于某些原因,我必须删除with子句并重新创建查询


当您应该解决原始问题,而不是试图绕过第一个问题来解决次要问题时,这似乎是一个XY问题。我的建议是解决如何绕过这个限制,这样您只需要查询表一次,就可以避免自联接;但是,同样,您没有提供任何详细信息,因此我们无法提供任何帮助建议。

-25年前,在ANSI-92 SQL标准中,旧样式的逗号分隔表样式被正确的ANSI连接语法所取代,因此不鼓励使用Hanks Marc。链接非常有用。请写下你的查询以使用显式连接,不要忘记链接k与k1和/或t与t1:谢谢Arvo。现有连接条件是否正确?我只需要再添加2个和子句..对吗?@ShrutiSharma。不可以。在连接n个表的查询中,应该有n-1 ON子句。在FROM子句中使用逗号只会导致您遇到的问题类型。-25多年前,在ANSI-92 SQL标准中,旧样式的逗号分隔表列表样式被正确的ANSI连接语法所取代,因此不鼓励使用Hanks-Marc。链接非常有用。请写下你的查询以使用显式连接,不要忘记链接k与k1和/或t与t1:谢谢Arvo。现有连接条件是否正确?我只需要再添加2个和子句..对吗?@ShrutiSharma。不可以。在连接n个表的查询中,应该有n-1 ON子句。在FROM子句中使用逗号只会导致您遇到的问题类型。非常感谢。可悲的是,我不能提高投票率,因为我没有最低15票的要求。今天我得到了15票,所以提高了投票率。这个答案对我帮助很大:非常感谢。可悲的是,我不能提高投票率,因为我没有最低15票的要求。今天我得到了15票,所以提高了投票率。这个答案对我帮助很大:
   select count(*) from(  SELECT
            k.inventory_item_id        AS inventory_item_id,
            k.organization_id          AS organization_id,
            k.primary_uom_code         AS primary_uom_code,
            k.concatenated_segments    AS concatenated_segments,
            t.description              AS description,
            t.language                 AS language
        FROM
            mtl_system_items_b_kfv  k,
            mtl_system_items_b_kfv k1,
            mtl_system_items_tl     t,
            mtl_system_items_tl     t1
        WHERE 
               k.inventory_item_id = t.inventory_item_id and
               k1.inventory_item_id = t1.inventory_item_id AND
           k.organization_id = t.organization_id and
            k1.organization_id = t1.organization_id 
            );