【问题标题】:How to JOIN table ON .. LIKE ... 'table.variable'如何在 .. LIKE ... 'table.variable' 上加入表
【发布时间】:2015-10-14 09:24:50
【问题描述】:

我有两个表,我正在尝试加入它们并在 mySQL 上使用 LIKE 函数。

我的初始代码是:

select A.column
from A
join B
  on (B.column) like ('%A.column%');

然后我搜索了stackoverflow过去的答案,发现我的版本没有错,同时我发现这个版本也不起作用:

select A.column 
from A
join B 
  on B.column like '%'+ A.column +'%';

最后我用了这个:

select A.CPM , B.column , A.column 
from A
join B 
  on B.column like concat('%', A.column,'%');

它奏效了。我的问题是为什么以前的版本不起作用?是因为mySQL版本吗?根据我的研究,所有 3 个版本的语法都是正确的。不过,前两个在 mySQL 上的结果是空白的。

【问题讨论】:

  • 第一次只是string literal 第二次使用+ 不用于字符串连接,最后一次是在运行时构建。这就是最后一个有效的原因。
  • @lad2025 第二个有什么问题?
  • + 不是用于字符串连接,而是用于添加。
  • SELECT '%' + 'a' + '%' => 0 使用 + 我的 slq 尝试转换为数字并计算总和。

标签: mysql join sql-like


【解决方案1】:

第一:行不通

select A.column
from A
join B
  on (B.column) like ('%A.column%');

原因:

这只是字符串文字,硬编码的值

B.column LIKE '%A.column%'  

第二个:行不通

select A.column 
from A
join B 
  on B.column like '%'+ A.column +'%';

原因:

+ 不是用于字符串连接,而是用于添加。示例:

SELECT '%' + 'a' + '%' -- result 0, mysql tries to convert to numbers and compute sum.

第三:会起作用

select A.CPM , B.column , A.column 
from A
join B 
  on B.column like concat('%', A.column,'%'); 

原因:

您在运行时使用正确的函数 CONCAT 构建最后一个值

【讨论】:

    【解决方案2】:

    在MYSQL中Like是一个字符串比较函数。

    LIKE 运算符用于在列不匹配的列中搜索指定模式。

    在上面的两个示例中,您与列匹配。在最后一个中,您首先将列转换为字符串,然后应用like。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-18
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多