首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL Match...Against与nulls?

MySQL Match...Against与nulls?
EN

Stack Overflow用户
提问于 2010-10-27 05:01:00
回答 2查看 797关注 0票数 1

我有一个使用左连接的查询,如下所示:

代码语言:javascript
复制
SELECT a.id, a.username, a.date_created, a.contact_id, a.role_id,
  c.first_name, c.middle_initial, c.last_name, c.email, r.role
FROM accounts AS a
LEFT JOIN contacts AS c ON a.contact_id = c.id
LEFT JOIN roles AS r ON a.role_id = r.id
WHERE ( MATCH (a.username, c.first_name, c.middle_initial, c.last_name, c.email) 
  AGAINST ('searchTerm*' IN BOOLEAN MODE) )

问题是,有一些帐户(a.id)没有对应的联系人(c.id)或角色(r.id),因此当加入时,该信息将为空(我猜)。

当发生这种情况时,我得到的结果无论如何都不匹配搜索词(在正常结果之上),而且它们都是由连接填充了空值的结果。

我尝试过不同类型的连接,我也在互联网上寻找过,但我还没有找到专门解决这个问题的东西。我认为这将对其他人有用,因为我可以在其他领域看到这一点。

因此,任何帮助都将不胜感激,谢谢!

EN

回答 2

Stack Overflow用户

发布于 2010-10-27 05:06:10

你需要用emtpy字符串替换NULLS,这样你就不会得到任何虚假的匹配。只需匹配COALESCE(c.email, '') (等),而不仅仅是字段。

COALESCE将返回其第一个参数,除非它为NULL,否则将返回第二个参数。

票数 1
EN

Stack Overflow用户

发布于 2010-10-27 05:19:56

嘿,伙计们,我注意到了一些我认为是答案但不是的:当我把r.role放到匹配子句中时,问题就解决了。老实说,我不太理解其中的逻辑,但我知道这就是为什么会出现额外的记录,因为该字段是在没有过滤器的情况下被请求的。

不幸的是,它仍然没有解决。很抱歉回答得太早了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4027995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档