我有一个SQL查询的想法,但我不确定这是否可能。我们假设我有一个包含3列的表:
IDNUMBER, PARAGRAPH, ANIMAL
IDNUMBER
只是一个关键的标识号。
PARAGRAPH
总会有大块文字,有时会在段落中提及动物。
ANIMAL
将始终设置一个小值,例如“Dog”或“Monkey”。
对于每个IDNUMBER
,是否有一种方法可以获取Animal列中的值
使用该值进行相应Paragraph
列的字符串搜索?我不确定是否需要将Animal值分配给每个循环的某种字符串变量?在这一点上,这更多是概念性问题,因为我不确定这在SQL中是否可行,但是类似于:
SELECT
idnumber, paragraph, animal
FROM
zootable
WHERE
paragraph NOT LIKE ('%currentAnimalValue%')
对不起,这个是如此的手工波浪,我只是在寻找一个理智的检查。感谢您提供的任何帮助/智慧! :)
答案 0 :(得分:4)
你的意思是这样吗?
select t.*
from t
where t.paragraph not like '%' || t.animal || '%' ;
某些数据库使用concat()
,+
或&
进行字符串连接。
答案 1 :(得分:2)
戈登的回答可能会产生一些错误的匹配。
例如:'panda' like '%pandas%'
返回True。
'ant' like '%pant%'
返回True
为避免这种情况,您应该使用regexp
(在Oracle中)来考虑单词边界(假设段落列以空格分隔)。
对于比赛使用:
select * from t
where regexp_like(paragraph,'(^|\s)'||animal||'(\s|$)')
对于非匹配使用
select * from t
where not regexp_like(paragraph,'(^|\s)'||animal||'(\s|$)')