MySQL匹配...反对空值?

时间:2010-10-26 21:01:00

标签: sql mysql

我有一个使用左连接的查询:

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),所以当加入时,这些信息会出现空(我猜)。

当发生这种情况时,我会得到与搜索词不匹配的结果,无论什么(在正常结果之上),并且它们都是由连接填充空值的那些。

我尝试了不同类型的连接,并且我已经在互联网上查看,但我还没有找到专门解决这个问题的东西。我认为这会对其他人有用,因为我可以看到其他领域出现这种情况。

所以,任何帮助都将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

嘿,大家好,我注意到了一些我认为是答案的但却不是:当我把r.role放入匹配条款时,问题就解决了。说实话,我不太了解逻辑,但我明白这就是制作额外记录的原因,因为没有过滤器就要求该字段。

不幸的是,它仍未得到解决。对不起,过早回答。