SQL搜索使用另一个字段作为字符串值

时间:2016-12-08 21:29:52

标签: sql oracle teradata

我有一个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%')

对不起,这个是如此的手工波浪,我只是在寻找一个理智的检查。感谢您提供的任何帮助/智慧! :)

2 个答案:

答案 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|$)')