2011-08-16 103 views
0
SELECT * 
FROM Posts 
WHERE MATCH (Posts.City) AGAINST ('Lujan') 

顯示29行。但:使用內部連接返回零行的MySQL查詢

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的所有查詢都停止了。我能做些什麼來解決這個問題?謝謝

+1

看起來好像沒有任何用戶和帖子的城市是Lujan – Sathya

回答

3

這意味着Users表中沒有與Posts表匹配的行。如果你想要選擇行,即使沒有匹配,使用一個外部連接(在你的情況下用一個RIGHT JOIN改變INNER JOIN)。

1

這會返回你的行嗎?用戶表中可能沒有相應的用戶條目用於您的帖子記錄。

SELECT * 
FROM Posts 
LEFT JOIN Users ON Users.User = Posts.User 
WHERE MATCH (Posts.City) AGAINST ('Lujan')