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

使用逗号分隔的表列表而不是连接关键字时,将Oracle(交叉连接?)转换为Netezza,oracle,join,netezza,cross-join,Oracle,Join,Netezza,Cross Join,下面是一些Oracle PL/SQL代码,用于在不使用实际联接关键字的情况下联接表。这看起来像是交叉连接?如何转换为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交叉连接: 以下是我迄今为止所做的尝试: SELECT * from T

下面是一些Oracle PL/SQL代码,用于在不使用实际联接关键字的情况下联接表。这看起来像是交叉连接?如何转换为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交叉连接:

以下是我迄今为止所做的尝试:

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';
编辑: 没有名字的马:

当我一开始在Netezza中对COUNT(*)使用任何一种语法时,它都会工作并返回一个60的计数,这与在Oracle中运行时上面的第一个查询相匹配。Netezza中不包含WHERE子句将返回125316个结果,这与在Oracle中运行时的第一个查询相匹配。当我在一开始使用Netezza中的任一语法作为SELECT*时,我得到了一个错误

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


在进行交叉联接时,必须在Netezza中使用显式列。使用SELECT*会抛出“我的问题编辑”中指示的错误。还必须通过不转义来转义“%”字符。谢谢你一匹没有名字的马。干杯“每个人都知道你的名字。”;-)


像内在一样简单?X是一个列名。(您对
=Y
的编辑更改了查询的含义)Oracle SQL应该像在任何SQL数据库中一样工作(尽管交叉连接在我看来非常奇怪)。但是,如果您确实想用交叉连接替换它,那么它将是表a中的交叉连接表b中的
,其中…
我不知道Netezza,但是错误消息似乎表明您的
选择*
选择的列太多(“记录大小”)。尝试只选择您真正需要的列,而不是两个表中的所有列。“正确的”交叉连接语法不会改变这一点,因为您仍将选择所有列。谢谢!选择单个列是有效的。这个*一定是模棱两可的。所以这实际上是一个交叉连接(在第一个查询中)?是的。(当我声称不是时,你在两列上有一个条件(
a.X=Y
)在您的查询中,我怀疑这是表之间的连接条件。但当您将其更改为与常量
a.x='Y'
的比较时,它不能再是连接条件,因此它是交叉连接,而不是带有隐式连接条件的内部连接。另一个很好的例子是为什么使用显式连接更好-即使对于交叉连接
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'