2014-12-02 83 views
-3

这是很难解释,但是,我有一个表(租户)与列称为居住者。我想知道列中的值是否完全/部分地与另一个表(冒犯性)中的值匹配,只有一列称为bad_words。如何搜索另一个表中的另一列的每一行的表列

tbl_Tenant.Occupant 
------------------ 

Julia f*t 
P*y Girl 
Gary A*e 

tbl_Offensive.bad_words 
--------- 
s*t 
f*t 
p*y 
a*e 

我知道下面的查询是不正确,但我想这样做,但不能认为正确的方法来脚本它。

select * from tbl_tenant t 
where t.occupant like '%(select o.bad_words from tbl_offensive o)%' 

有人可以帮忙!

回答

2

此线非常相似:SQL: Join tables on substrings

翻译为你的表:

Select * 
From tbl_Tenant t 
Inner Join tbl_Offensive As o 
    on (o.bad_words like '%'+t.Occupant+'%') 
+0

@ArdalanShahgholi您好,感谢您的回复。我正在搜索大约600万条记录。这段代码是否有另一个优化版本,因为它将永远运行。也有一种方法来检索记录,如果有单词匹配,即'约翰猫咪massod'。这应该返回,因为'猫'匹配。不是因为'屁股'在'massod'中找到。您的代码同时找到“猫”和“massod” – 2014-12-03 11:07:40

+0

我稍微改变立法院上面的代码:SELECT * 从tbl_Tenant牛逼 内加入tbl_Offensive邻 上(o.bad_words LIKE“%‘+ t.Occupant +’%” )。这工作奇迹。感谢所有的帮助。我会投票你的答案 – 2014-12-03 11:16:33

1

它最多可以工作:

Select * 
From tbl_Tenant As T 
    cross join tbl_Offensive As O 
Where (O.bad_words like '% ' + T.Occupant + ' %') 
    Or 
    (O.bad_words like T.Occupant + ' %') 
    Or 
    (O.bad_words like '% ' + T.Occupant) 
相关问题