下面是一些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字节'
答案 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'