mysql使用第二个表中的搜索词搜索文本

时间:2013-10-22 02:50:08

标签: mysql sql

我在mysql中有两个表。

一个名为importcity的表有6列文本。

列为:agtrmksagtrmks_2agtrmks_3pubrmrkspubrmrks_2pubrmrks_3

第二个表名为filter,包含搜索词。我想删除importcity中与任何搜索词匹配的任何行。我在相关查询的路径上,但我无法弄明白。我也尝试连接列,但我被困在where和like条款。

如果我手动执行此操作,则此SQL语句可正常工作

`DELETE FROM `importcity_houston` where lower(concat(`agtrmks`,`agtrmks_2`,`agtrmks_3`,`pubrmrks`,`pubrmrks_2`,`pubrmrks_3`))   REGEXP '(auction.com|bank of america|fannie|fha|freddie|homepath|homesteps|hubzu|hud|short sale)'`  

但是我希望从过滤表中的术语动态创建正则表达式部分。

2 个答案:

答案 0 :(得分:0)

我不完全确定你在寻找什么。我猜你要在六个字段中的任何一个中搜索一堆搜索词。您可以使用LIKE,而不是使用IN。它看起来像下面这样:

SELECT I.* 
FROM importcity_houston AS I
WHERE I.agtrmk IN ('FirstSearch', 'SecondSearch', 'ThirdSearch') OR
      I.agtrmks_2 IN ('FirstSearch', 'SecondSearch', 'ThirdSearch') OR
      I.agtrmks_3 IN ('FirstSearch', 'SecondSearch', 'ThirdSearch') OR
      I.pubrmrks IN ('FirstSearch', 'SecondSearch', 'ThirdSearch') OR
      I.pubrmrks_2 IN ('FirstSearch', 'SecondSearch', 'ThirdSearch') OR
      I.pubrmrks_3 IN ('FirstSearch', 'SecondSearch', 'ThirdSearch')

答案 1 :(得分:0)

尝试这样的事情:

 DELETE from importcity
 WHERE agtrmks in (
   SELECT a.agtrmks 
   FROM (select i.agtrmks 
         FROM importcity i 
         cross join filter f on i.agtrmks = f.search_terms
         OR i.agtrmks_2 = f.search_terms 
         OR i.agtrmks_3 = f.search_terms 
         OR i.pubrmrks = f.search_terms 
         OR i.pubrmrks_2 = f.search_terms 
         OR i.pubrmrks_3 = f.search_terms 
        ) as a);

<强> SQL Fiddle..