【问题标题】:How to search a table column for each row against another column in another table如何针对另一表中的另一列搜索每一行的表列
【发布时间】:2014-12-04 12:41:37
【问题描述】:

这很难解释,但是我有一个表(租户),其中有一列称为 occupant。我想知道列中的值是否完全/部分匹配另一个表中的值(冒犯性),只有一个名为 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)%'

有人可以帮忙吗!

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    这个帖子很相似:SQL: Join tables on substrings

    为您的表格翻译:

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

    【讨论】:

    • 嗨@ArdalanShahgholi,感谢您的回复。我正在搜索大约 600 万条记录。是否有此代码的另一个优化版本,因为它需要永远运行。如果有单词匹配的单词,例如“John Pussy massod”,是否有办法只检索记录。这应该返回,因为 'pussy' 匹配。不是因为在“massod”中发现了“ass”。您的代码同时找到“pussy”和“massod”
    • 我将上面的代码稍微修改为:Select * From tbl_Tenant t Inner Join tbl_Offensive As o on (o.bad_words like '%'+t.Occupant+' %')。这创造了奇迹。感谢所有帮助过的人。我会投票给你的答案
    【解决方案2】:

    最重要的是工作:

    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 )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      相关资源
      最近更新 更多