2013-07-11 146 views
0

我有一個CLOB類型的列'PHOTOIDS',它有一個用逗號分隔的數字列表。我需要查詢所有具有一組'photoIds'的記錄。查詢THE CLOB列以獲取數字列表的最佳方式是什麼?IN查詢CLOB

我找語義相似

SELECT * FROM TABLE_NAME一些地方PHOTOIDS IN(1,2,3)

+0

如果它不是一個CLOB列,但是一個正常規範化的設計,你可以用以下幾種方式來看這個問題:** [如何過濾SQL結果中的多對一關係](http:// stackoverflow .COM /問題/ 7364969 /如何對過濾器-SQL結果-IN-A-具有一對多-通關係)**。 –

回答

0
SELECT * 
FROM table_name 
WHERE dbms_lob.instr(photoids, '1') > 0 
    AND dbms_lob.instr(photoids, '2') > 0 
    AND dmbs_lob.instr(photoids, '3') > 0; 

,你有一個數字相對有限的名單這工作只要要搜索:)

+2

「有限的數字列表」,因爲'1'會匹配'10'和'11'以及'111'和....很好,沒有必要爲這個觀點留下點印象。 – APC

+0

我的意思是有限數量的數字,例如,如果您針對100個不同的ID進行檢查,則效率不高。您注意到的問題(1匹配10,11和111)可以根據數據如何存儲在clob中來解決。例如,如果ID用逗號分隔,則可以簡單地使條件'dbms_lob.instr(photoids,'1,')> 0'。我剛剛指出@Skynet正確的功能(dbms_lob.instr) – xionutz2k

+0

那麼'1'將匹配'11'和'21'等。 – APC

0

我建議你規範設計,並有一個孩子表來保存photoIds..then這將是高效和易於

如果你不能這樣做,那麼使用一個過程/函數或動態SQL會做的伎倆,讓我知道如果你想要更多的信息,如何使用這兩個。