Oracle-12c
選擇不包含子字元串/欄位的字元串
TableA.content
isvarchar2(4000)
,它是從包含網站標記和文本的 CLOB 值填充的,實際上是段落。TableB.keyword
包含一個我想在TableA.content
.我想做這樣的事情,但是不太對。我錯過了什麼?
select tableA.content from TableA where (select distinct(TableB.keyword) from TableB) not in TableA.content;
因此,我希望其中的所有行都
TableA
沒有TableB.keyword
.我正在檢查,
MATCH
或者CONTAINS
但我無法正確使用它們。
我相信這個問題可以總結如下:
TableA
如果在 中不存在行,則從中選擇一行,TableB
它TableB.keyword
是 的子字元串TableA.content
。可以公平地說,前面的答案實現了大致相同的邏輯。同時,在我看來,它以一種不那麼直接的方式這樣做。下面的查詢更直接地匹配建議的邏輯,並且可以說更容易理解:
SELECT content FROM TablA WHERE NOT EXISTS ( SELECT * FROM TableB WHERE TableA.content LIKE '%' || TableB.keyword || '%' ) ;
您的子查詢可能會返回幾行,但預計只會返回一個並且會出錯。此外,
in
sql 運算符旨在處理集合而不是字元串。如果您
tableA
有 ID,則可以嘗試以下查詢:select tableA.content from TableA where ID not in ( select distinct a.ID from TableA a join TableB b on (a.content like ('%'||b.keyword||'%')) -- for case insensitive matching use instead: -- join TableB b on (lower(a.content) like ('%'||lower(b.keyword)||'%')) );