使用逗号分隔的表列表而不是JOIN关键字时,将Oracle(交叉连接?)转换为Netezza

时间:2016-04-04 08:29:15

标签: oracle join netezza cross-join

下面是一些Oracle PL / SQL代码,用于在不使用实际JOIN关键字的情况下连接表。这看起来像一个交叉连接?我如何转换为Netezza SQL代码?那就是我被困住的地方。

SELECT COUNT(*) 
FROM TABLE_A A, TABLE_A B
WHERE A.X = 'Y' AND A.PATH LIKE '/A/A/A'
AND B.X = 'Z' AND B.PATH LIKE '/B/B/B';

Oracle Cross Join:

http://www.sqlguides.com/sql_cross_join.php

这是我到目前为止所尝试的内容:

SELECT *
from TABLE_A A
cross join (
    select * from TABLE_A
) B
WHERE 
  A.X = 'Y' AND A.PATH LIKE '/A/A/A'
  AND B.X = 'Z' AND B.PATH LIKE '/B/B/B';

编辑:

a_horse_with_no_name:

当我在一开始使用Netezza中的任一语法作为COUNT(*)时,它会工作并返回60的计数,这与在Oracle中运行时的上述第一个查询相匹配。如果没有Netezza中的WHERE子句,则返回125316结果,这与在Oracle中运行时的上述第一个查询相匹配。当我在一开始使用Netezza中的任一语法作为SELECT *时,我得到错误

  

错误[HY000]错误:记录大小70418超出内部限制65535字节'

1 个答案:

答案 0 :(得分:0)

在执行CROSS JOIN时,必须在Netezza中使用显式列。使用SELECT *会抛出错误,如我的编辑问题所示。也不得不逃避'%'通过逃避任何东西的角色。谢谢a_horse_with_no_name。干杯! "每个人都知道你的名字。" ; - )

select A.CODE, B.CODE, LOWER(A.DIM), LOWER(B.DIM)
FROM TABLE_A A
cross join TABLE_A B
WHERE A.PATH LIKE '\A\A\A%' ESCAPE '' AND A.X = 'Y'
AND B.PATH LIKE '\B\B\B%' ESCAPE '' AND B.X = 'Y'