我正在使用SQL在HANA上編寫腳本計算視圖。 尋找我在while循環中實現的邏輯的一些性能提升替代品。代碼的簡化版本如下。HANA SQL CTE where條件
它試圖從表A獲得廠商表B中尋找類似的廠商
請原諒不準確的語法。
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
當兩個表中有成千上萬的記錄時,此查詢就會消失。所以在閱讀了一些博客之後,我意識到我正在使用循環的方向錯誤。
爲了讓這一點更快,我遇到了一個叫做CTE的東西。
當我試圖使用CTE實現相同的代碼時,我不允許這樣做。 我想寫的代碼示例如下。任何人都可以幫我解決這個問題嗎?該語法不被系統接受。
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));
此語法的SQL錯誤是: SQL:無效的標識符:MYTAB
我想知道:
無論是與CTE這樣的操作是允許的。如果是,那麼HANA SQL中的正確語法是什麼?
如果否,我如何在不循環一張表的情況下實現所需的結果?
感謝,
阿努普
謝謝拉爾斯。在新查詢中,** mytab。「VendorName」**的語法不正確。我想知道CTE是否允許在哪種情況下使用mytab字段。在功能上,所有我尋找從表A到模糊搜索(這意味着在表A中的每個條目表B中多於一個的結果)一個VLOOKUP成表B和從表B中的結果與表A中的每個條目映射。你能請教如何在沒有while循環的情況下做到這一點? –
就*表變量*而言,這些不能用於像計算視圖這樣的「只讀」過程。即使有**表變量**,我也懷疑我是否可以在不使用循環的情況下完成我的場景。那麼提高性能的最好方法是什麼? –
謝謝,這有助於部分解決,但採用這種方法我無法將搜索結果映射到特定用戶。比方說,有兩種結果(SY和SYST)匹配SYS,和一個結果(系統)匹配系統,都讓我有此查詢得到的是SY,SYST和系統。但我無法映射哪一個匹配哪一個,除非我循環**:user_names **中的用戶。 –