SELECT *
FROM Posts
WHERE MATCH (Posts.City) AGAINST ('Lujan')
显示29行。但是:
SELECT Users.*, Posts.*
FROM Users
INNER JOIN Posts ON Users.User = Posts.User
WHERE MATCH (Posts.City) AGAINST ('Lujan')
得到零结果,而我应该得到完全相同的结果。
向回显的查询添加解释:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Posts fulltext city_comparator,user_comparator city_comparator 0 1 Using where
1 SIMPLE Users eq_ref user_unique,user_comparator user_unique 62 chusmix.Posts.User 1
我不知道这意味着什么,但在表用户中,全文索引“user_comparator”的基数为0.虽然我已经注册了10个以上的用户。我还有列Users.User的唯一索引和Users.ID的主索引。
我改变了一些内容,所有使用INNER JOIN的查询都停止了工作。我该怎么做才能解决这个问题?感谢
答案 0 :(得分:3)
这意味着Users表中没有与Posts表匹配的行。如果您想要选择行,即使没有匹配项,也可以使用外部联接(在您的情况下,使用RIGHT JOIN更改INNER JOIN)。
答案 1 :(得分:1)
这会返回你的行吗?用户表中可能没有相应的用户条目用于帖子记录。
SELECT *
FROM Posts
LEFT JOIN Users ON Users.User = Posts.User
WHERE MATCH (Posts.City) AGAINST ('Lujan')