Mysql sql搜索记录,其中字段2类似(字段1某处带有破折号)

Mysql sql搜索记录,其中字段2类似(字段1某处带有破折号),mysql,sql,Mysql,Sql,包含该词重复条目的词典数据库。1是正确的第二条记录不同且不正确。好的行在字段2中的任何位置都没有字段1的连字符版本 所有不良记录的第二个字段(定义)中都有字段1中的单词,但单词中的某个地方有破折号或连字符 要查找的行的两个示例:A)field1=母亲,field2在字段定义中的某个地方有单词M-other;B) field1=Jackknife,field 2在字段定义内的某个位置具有Jackknife。 所以我想到了一个like子句,但是like(field1在field1单词的任何地方都有一

包含该词重复条目的词典数据库。1是正确的第二条记录不同且不正确。好的行在字段2中的任何位置都没有字段1的连字符版本

所有不良记录的第二个字段(定义)中都有字段1中的单词,但单词中的某个地方有破折号或连字符

要查找的行的两个示例:A)field1=母亲,field2在字段定义中的某个地方有单词M-other;B) field1=Jackknife,field 2在字段定义内的某个位置具有Jackknife。 所以我想到了一个like子句,但是like(field1在field1单词的任何地方都有一个连字符)

如果这不是太令人困惑,我希望有人能有一些想法来尝试。如果你需要澄清,请告诉我。非常感谢您提前看一看。

以获得坏行

Select field1, field2
from table
where replace(field2, '-', '') = field1
排好队

Select field1, field2
from table
where field1 not like '%-%'

你可以试试那样的东西

-- the bad ones
SELECT *
FROM Table_XY
WHERE REPLACE(field2,'-','') LIKE '%' + field1 + '%'

-- the good ones
SELECT *
FROM Table_XY
WHERE REPLACE(ISNULL(field2,''),'-','') NOT LIKE '%' + field1 + '%' OR
      field2 LIKE '%' + field1 + '%'

像这样的东西应该能起作用:

SELECT * FROM table1 WHERE
  field1 = REPLACE(field2, "-", "") AND
  (SELECT LENGTH(field2) - LENGTH(REPLACE(field2, '-', ''))) >= 1;
这样可以确保两个字符串是相同的,而不必考虑破折号。查询还检查field2是否有破折号,因此field1=Father和field2=Father将不会被选择,而field1=Father和field2=F-ather将被选择

如果希望查询不区分大小写,可以在查询中添加大写转换


请发布示例数据和更理想的输出,以说明您的问题?我认为,在这样一个琐碎的查询中使用临时表是不合理的,这只是为了尝试。。。您根本不需要临时表。您唯一需要的是我现在理解的where子句,您想要说明的是,您的查询是如何工作的我删除了临时表。太令人困惑了,太棒了,非常感谢大家。使用WHERE REPLACE(field2'-','')如“%”+field1+'%”和其他替代方法是我需要的经验丰富或天才的想法。摩根德耶