2016-04-04 32 views
0

実際のJOINキーワードを使用せずにテーブルを結合するいくつかのOracle PL/SQLコードを次に示します。これはクロス結合のように見えますか? Netezza SQLコードに変換するには?それは私が立ち往生している場所です。JOINキーワードの代わりにコンマ区切りテーブルリストを使用すると、Oracle(Cross Join?)をNetezzaに変換する

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のクロスが参加:

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'; 

はEDIT:

a_horse_with_no_name:

最初にCOUNT(*)のいずれかの構文をNetezzaで使用すると、Oracleで実行されているときに上記の最初のクエリと一致する60の数が返されます。 NetezzaのWHERE句がないと、125316の結果が返されます。これは、Oracleで動作しているときの最初のクエリに一致します。私は非常に最初にSELECT *のためのNetezzaの構文のいずれかを使用すると、私はエラーを取得する

ERROR [HY000] ERROR: Record size 70418 exceeds internal limit of 65535 bytes'

+0

INNERと同じですか? Xは列名です。 – MacGyver

+1

(あなたの編集 '= Y'から '=' Y 'はクエリの意味を変えました)Oracle SQLはどのSQLデータベースでも同じように機能するはずです。しかし、あなたが 'クロスジョイント 'で置き換えたいのであれば' table_a a cross join table_b b where ...'となるでしょう。 –

+0

編集を参照... ... – MacGyver

答えて

0

は、CROSSを行う際に、JOINネティーザに明示的な列を使用する必要がありました。 SELECT *を使用すると、私の質問EDITに示されているようにエラーがスローされます。また、エスケープすることで '%'文字をエスケープする必要がありました。ありがとうございます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' 
関連する問題