2016-04-04 10 views
0

Im Folgenden finden Sie einige Oracle PL/SQL-Codes zum Verknüpfen von Tabellen ohne Verwendung von JOIN-Schlüsselwörtern. Das sieht aus wie ein Cross beitreten? Wie würde ich zu Netezza SQL-Code konvertieren? Da stecke ich fest.Konvertieren Sie Oracle (Cross Join?) Zu Netezza, wenn Sie eine durch Komma getrennte Tabellenliste anstelle von JOIN-Schlüsselwörtern verwenden

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 Kreuz verbinden:

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

Hier ist, was ich bisher versucht:

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:

Wenn ich in Netezza eine der beiden Syntaxen für COUNT (*) benutze, funktioniert es und gibt eine Zahl von 60 zurück, die bei der Ausführung in Oracle der ersten obigen Abfrage entspricht. Ohne die WHERE-Klausel in Netezza werden 125316 Ergebnisse zurückgegeben, die bei der Ausführung in Oracle mit der ersten obigen Abfrage übereinstimmen. Wenn ich so oder Syntax in Netezza für die SELECT * in der ersten Stunde nutzen, bekomme ich Fehler

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

+0

einfach wie in INNER? X ist ein Spaltenname. – MacGyver

+1

(Ihre Edit '= Y' zu' = 'Y'' änderte die Bedeutung der Abfrage) Die Oracle SQL sollte so in jeder SQL-Datenbank arbeiten (obwohl die Cross-Join ** sehr ** seltsam für mich aussieht). Aber wenn Sie es mit einem 'Cross-Join 'ersetzen wollen, wäre es' von Tabelle_a eine Kreuz-Verknüpfung Tabelle_b b wobei ... ' –

+0

siehe EDIT ... ... – MacGyver

Antwort

0

explizite Spalten in Netezza verwenden musste, wenn ein CROSS JOIN tun. Wenn Sie SELECT * verwenden, wird der Fehler wie in der Frage BEARBEITEN angezeigt. Auch musste dem '%' Charakter entkommen, indem man nichts entging. Vielen Dank a_horse_with_no_name. Prost! "Wo jeder deinen Namen kennt." ;-)

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'