左连接连接中的 LIKE 语句

Posted

技术标签:

【中文标题】左连接连接中的 LIKE 语句【英文标题】:LIKE statement in left join connection 【发布时间】:2018-04-11 19:23:38 【问题描述】:

有什么方法可以在ON 子句中加入 mysql 中的 like 语句? 我有一个名为 new_product 的表,其中包含每天由 cron 作业生成的 product_name,并且我有一个现有的 product_detail 表,其中包含 product_name 和许多不同的属性。产品名称在两个表中都是唯一的,但问题是有时在 new_product 表中我会在末尾附加额外的字符,例如Milk Fr,而在产品详细信息中我有Milk。所以我不能使用new_product.product_name = product_detail.product_name 我需要在ON 子句中有like 但是因为我有30,000 行,所以我收到了一个错误。我将这两个列都设置为索引,但没有帮助。 (new_product.product_name = product_detail.product_name)

【问题讨论】:

添加适当的数据样本..请 你怎么知道like但不知道在哪里使用它?手册或谷歌搜索如何没有回答您的问题? “应该快”是什么意思,你为什么这么说以及为什么用谷歌搜索你的实际问题/问题没有帮助?请阅读How to Ask 和向下投票箭头鼠标悬停文本。只需谷歌搜索'fast mysql like join "%"' 就可以得到很多答案。 Mysql Improve Search Performance with wildcards (%%)的可能重复 谢谢@philipxy,它不是重复的,但它是相关且有用的。 【参考方案1】:

您可以在ON 子句中随意使用like,例如:

  select *
  from t1 
  left join t2 on t1.col1 = t2.colx and t1.col3 like 'A%'

  select *
  from t1 
  left join t2 on t1.col1 = concat('%', t2.colx, '%') 

【讨论】:

我编辑了我的问题。基本上,我不能在onclause 中有=,并且'concat' 解决方案很慢,因为我有超过30,000 行。 这意味着在 ON 子句中使用 like 是完全合法的.. . 除了将两列都设置为索引之外,还有什么方法可以让它运行得更快? 与 SQL 无关 .. 没有比设置有效索引更快的方法 .. 部分 sql 您可以改进服务器 .. 或更改日志 .. 例如:处理直接匹配更快,需要的行真的像一个单独的查询。【参考方案2】:

没有什么能阻止你拥有它。如果你担心速度。在列上放置索引

【讨论】:

以上是关于左连接连接中的 LIKE 语句的主要内容,如果未能解决你的问题,请参考以下文章

替换更新左连接语句中的缺失值

左连接中的 MySQL IF 语句

无法用左连接编写更新语句

sql语句左连接右连接区别

左连接和右连接

mysql:左连接内连接in()语句以及对比