我在mysql中有两个表。
一个名为importcity的表有6列文本。
列为:agtrmks
,agtrmks_2
,agtrmks_3
,pubrmrks
,pubrmrks_2
,pubrmrks_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)'`
但是我希望从过滤表中的术语动态创建正则表达式部分。
答案 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.. 强>