左连接连接中的 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, '%')
【讨论】:
我编辑了我的问题。基本上,我不能在on
clause 中有=
,并且'concat' 解决方案很慢,因为我有超过30,000 行。
这意味着在 ON 子句中使用 like 是完全合法的.. .
除了将两列都设置为索引之外,还有什么方法可以让它运行得更快?
与 SQL 无关 .. 没有比设置有效索引更快的方法 .. 部分 sql 您可以改进服务器 .. 或更改日志 .. 例如:处理直接匹配更快,需要的行真的像一个单独的查询。【参考方案2】:
没有什么能阻止你拥有它。如果你担心速度。在列上放置索引
【讨论】:
以上是关于左连接连接中的 LIKE 语句的主要内容,如果未能解决你的问题,请参考以下文章