【问题标题】:MySQL problem with query with LIKE on a NULL valueMySQL 对 NULL 值的 LIKE 查询问题
【发布时间】:2020-02-13 15:22:06
【问题描述】:

我有两个表:articles 和 trade。 他们是left join articles.tradeid = trade.id。并非每篇文章都有交易。所以有articles.tradeid 0的值。

当我开始搜索时:

SELECT * FROM articles 
LEFT JOIN trade ON articles.tradeid=trade.id 
WHERE CONCAT(articles.number,'|',trade.name) LIKE '%12345%'

虽然有一篇编号为 12345 的文章,但我没有得到任何结果,但它的 tradeid 为 0。 由于加入,trade.name 的值为NULL。 有人解决吗?

【问题讨论】:

  • IFNULL(trade.name,'') 怎么样?
  • 你能解释一下查询应该是怎样的吗?
  • 只需将 trade.name 替换为 IFNULL 语句
  • 这并不清楚问题是什么或期望的行为是什么。请在代码问题中给出minimal reproducible example--cut & paste & runnable code;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。对于包含最少代码的错误,您可以给出的代码是您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)How to Ask 适用于包含 DBMS 和 DDL 的 SQL,其中包括约束、索引和表格初始化。

标签: mysql join null concat


【解决方案1】:

您可以将CONCAT 替换为CONCAT_WS

SELECT * 
FROM articles 
LEFT JOIN trade ON articles.tradeid=trade.id 
WHERE CONCAT_WS('|', articles.number, trade.name) 
LIKE '%12345%'

DEMO

使用分隔符连接是CONCAT 的一种特殊形式。小心,因为它有不同的语法

【讨论】:

  • 这个答案对我来说是正确的答案。现在查询按预期/希望工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
相关资源
最近更新 更多