2013-12-09 68 views
0

在腳本配置我運行下面的查詢在Oracle數據庫上:甲骨文 - 允許LIKE子句被另一選擇

select nvl(max(to_char(DATA.VALUE)), 'OK') 
from DATA 
where DATA.FILTER like (select DATA2.FILTER from DATA2 where DATA2.FILTER2 = 'WYZ') 

在實際的腳本,它更復雜一些,但你的理念。 ;-)

DATA2.FILTER包含需要在DATA上作爲LIKE條款應用的過濾器。我們的想法是把它儘可能地通用,這意味着它應該可以在過濾:

  • FILTER%
  • %FILTER
  • FI%LTER
  • %FILTER%
  • FILTER(如同條款是DATA.FILTER =(從選擇DATA2其中DATA2.FILTER DATA2.FILTER2 =「WYZ」)

腳本上不允許存儲過程FO運行運行的系統這種任務,我也不能讓腳本在運行之前直接構建查詢。

無論需要提取什麼數據,都必須使用一個查詢來完成。

我已經嘗試了很多我在網上找到的解決方案,但無論我做了什麼,我似乎都會誤認爲是商標。

我在這裏做錯了什麼?

+1

你有什麼問題? – Joe

+0

當查詢返回我正在查找的實際值時,我只會得到結果...我無法使它與通配符一起工作。 – Fysicus

+0

它[在我進行的測試中爲我工作](http://www.sqlfiddle.com/#!4/cfa4b/6/0)。你使用什麼值不起作用? – Joe

回答

0

這一個?

select nvl(max(to_char(DATA.VALUE)), 'OK') 
from DATA 
    JOIN DATA2 on DATA.FILTER LIKE DATA2.FILTER 
where DATA2.FILTER2 = 'WYZ' 

注:此查詢的性能是不是最佳的,因爲表的數據Oracle將始終執行「全表掃描」 - 但它的作品。

+0

性能是一個問題....我會嘗試這一個,但至少有一個我默認加入的表是巨大的 – Fysicus