0

我在mysql中有两个表。

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

列是:agtrmks, agtrmks_2, agtrmks_3, pubrmrks, pubrmrks_2, pubrmrks_3

第二个表,称为过滤器,有搜索词。我想删除 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)'`  

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

4

2 回答 2

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')
于 2013-10-22T03:18:37.903 回答
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小提琴..

于 2013-10-22T05:14:36.357 回答