2017-02-13 72 views
1

我在表上使用全文搜索,並將它與來自不同數據庫的表連接在一起。 表(table1)在列name上定義了全文索引。MySQL全文搜索不能使用左連接

,當我嘗試使用全文搜索以下查詢不起作用:

SELECT t1.id, t2.id, t2.url 
FROM `db1`.table1 t1 
LEFT JOIN `db2`.table2 t2 
ON t1.column1 = t2.column1 
WHERE t2.column1 IS NOT NULL 
AND MATCH (t1.name) AGAINST ('searchString' IN NATURAL LANGUAGE MODE) 

但使用它,而不左側時加入了查詢工作:

SELECT t1.id 
FROM `db1`.table1 t1 
WHERE MATCH (t1.name) AGAINST ('searchString' IN NATURAL LANGUAGE MODE) 

注:我不能使用LIKE %searchString% ,而不是match-against的性能問題。

有沒有在同一個查詢中使用全文搜索和左連接的方法?

編輯:它似乎是某種程度上與兩個表不在同一個數據庫的事實有關。當試圖用相同的數據庫中的兩個表執行相同的查詢時,它可以工作。任何想法爲什麼這可能發生?

+0

如果刪除t2.column1 IS NOT NULL,會發生什麼情況。 – jarlh

+0

可以在這裏添加示例數據 –

+0

在刪除IS NOT NULL時仍不起作用。 沒有得到任何錯誤,查詢只是卡住了。 – AnatPort

回答

0

是的我們可以使用全文搜索和左連接查詢。

檢查示例和查詢。 :Link

 SELECT t1.id, t2.id, t2.url 
     FROM `db1`.table1 t1 
     LEFT JOIN `db2`.table2 t2 
     ON t1.column1 = t2.column1 and t2.column1 IS NOT NULL 
     where MATCH (t1.name) AGAINST ('searchString' IN NATURAL LANGUAGE MODE) 

請讓我們知道,如果有任何錯誤。

+0

謝謝你的例子!似乎這個問題在某種程度上與兩個表不在同一個數據庫中的事實有關。該查詢不適用於來自不同dbs的兩個故事,但當嘗試使用來自同一個db的兩個表執行相同的查詢時,它可以工作。 任何想法爲什麼會發生這種情況? – AnatPort

+0

我認爲這可能不會發生。我在這裏用虛擬數據庫進行了檢查。有用。 - 到達我@ sujayb7 @ gmail –

0
MATCH(t1.name) AGAINST ('searchString' IN BOOLEAN MODE)>0 
+0

謝謝,但這並不能解決問題。 – AnatPort

0

FYI where t2.column1 is not null將左連接變爲連接。 左連接是來自第一個表的所有數據,但是當您在右表(第二個)上指定where子句時,則強制查詢進入連接。這可能是查詢不起作用的原因。第二個(右)表中沒有匹配的數據。