我有一个使用左连接的查询:
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),所以当加入时,这些信息会出现空(我猜)。
当发生这种情况时,我会得到与搜索词不匹配的结果,无论什么(在正常结果之上),并且它们都是由连接填充空值的那些。
我尝试了不同类型的连接,并且我已经在互联网上查看,但我还没有找到专门解决这个问题的东西。我认为这会对其他人有用,因为我可以看到其他领域出现这种情况。
所以,任何帮助都将不胜感激,谢谢!
答案 0 :(得分:1)
你需要用emtpy字符串替换NULLS
,然后你就不会得到任何虚假的匹配。只需匹配COALESCE(c.email, '')
(等),而不仅仅是字段。
COALESCE
将返回其第一个参数,除非它为NULL,然后它将返回第二个参数。
答案 1 :(得分:0)
不幸的是,它仍未得到解决。对不起,过早回答。