使用Inner Join返回零行的MySQL查询

时间:2011-08-16 04:01:07

标签: mysql sql

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的查询都停止了工作。我该怎么做才能解决这个问题?感谢

2 个答案:

答案 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')