Ich schreibe eine skriptbasierte Berechnungsansicht auf HANA mit SQL. Auf der Suche nach einigen Performance-Booster-Alternativen für die Logik, die ich in einer While-Schleife implementiert habe. Die vereinfachte Version des Codes finden Sie weiter unten.HANA SQL CTE WHERE BEDINGUNG
Es wird versucht, für Anbieter aus der Tabelle A.
Bitte Geduld mit mir für ungenaue Syntax ähnlich aussehende Anbieter in Tabelle B zu erhalten.
v = select vendor, vendorname from A;
while --set a counter here
vendorname = capture the record from v for row number represented by counter here
t = select vendor, vendorname from v where (read single vendor from counter row)
union all
select vendor, vendorname from B where contains(vendorname,:vendorname,fuzzy(0.3))
union all
select vendor, vendorname from t
endwhile
Diese Abfrage wird beendet, wenn Tausende von Datensätzen in beiden Tabellen vorhanden sind. Nachdem ich einige Blogs gelesen hatte, wurde mir klar, dass ich in eine falsche Richtung gehe, die Loop verwendet.
Um das etwas schneller zu machen, stieß ich auf etwas namens CTE.
Wenn ich versucht habe, den gleichen Code mit CTE zu implementieren, darf ich das nicht tun. Beispielcode, den ich versuche zu schreiben, ist unten. Kann mir bitte jemand helfen, das richtig zu machen? Die Syntax wird vom System nicht akzeptiert.
t = with mytab ("Vendor", "VendorName")
AS (select "Vendor", "VendorName" from "A" WHERE ("Updated_Date" >= :From_Date AND "Updated_Date" <= :To_Date))
select * from "B" WHERE CONTAINS ("VendorName", mytab."VendorName",FUZZY(0.3));
Der SQL-Fehler für diese Syntax: SQL: ungültige Kennung: MyTab
ich wissen möchte:
Ob eine solche Operation mit CTE erlaubt ist. Wenn ja, wie lautet die korrekte Syntax in HANA SQL?
Wenn nein, wie erreiche ich das gewünschte Ergebnis, ohne eine Tabelle durchlaufen zu müssen?
Danke,
Anup
Danke Lars. In der neuen Abfrage ist ** mytab. "VendorName" ** nicht korrekt Syntax. Ich würde gerne wissen, ob CTEs Bereiche von Mytab in welchem Zustand erlauben. Funktionell ist alles, was ich suche, ein vlookup von Tabelle A in Tabelle B durch eine unscharfe Suche (was mehr als ein Ergebnis in Tabelle B für jeden Eintrag in Tabelle A bedeutet) und die Ergebnisse von Tabelle B gegen jeden Eintrag in Tabelle A abbildet Kannst du mir bitte raten, wie ich es ohne while loop machen kann? –
Und soweit es sich um * Tabellenvariablen * handelt, können diese nicht in "schreibgeschützten" Prozeduren wie Berechnungsansichten verwendet werden. Auch bei ** Tabellenvariablen ** bezweifle ich, ob ich mein Szenario ohne Loops erfüllen kann. Was ist der beste Weg, um die Leistung zu verbessern? –
Danke, das hilft teilweise, aber mit diesem Ansatz kann ich das Suchergebnis nicht einem bestimmten Benutzer zuordnen. Nehmen wir an, es gibt zwei Ergebnisse (SY und SYST), die mit SYS übereinstimmen, und ein Ergebnis (SYSTEMS), das mit SYSTEM übereinstimmt. Alles, was ich mit dieser Abfrage bekomme, sind SY, SYST und SYSTEMS. Aber ich kann nicht zuordnen, welches zu welchem passt, wenn ich nicht die Benutzer in **: user_names ** durchlaufe. –