2017-02-13 30 views
1

テーブルでフルテキスト検索を使用していて、別のDBのテーブルに結合して残しました。 テーブル(table1)にはフルテキストインデックスが列nameで定義されています。MySQLのフルテキスト検索が左結合で機能しない

私はフルテキストを使用してみてください、次のクエリが動作しない検索:

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

注:私はLIKE %searchString%を使用することはできませんが

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) 

が左サイドなしでそれを使用してクエリワークス参加、パフォーマンスの問題のためにmatch-againstの代わりに。

同じクエリで全文検索と左結合を使用する方法はありますか?

EDIT:問題は何とか、両方のテーブルが同じdbにないという事実に関係しているようです。同じデータベースから2つのテーブルを使って同じクエリを実行しようとすると、動作します。なぜこのようなことが起きるのでしょうか?

+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

例をありがとう!両方のテーブルが同じdbにないという事実と何らかの形で関係しているようです。クエリは異なるdbsの2つのテールでは機能しませんが、同じdbの2つのテーブルを使用して同じクエリを実行しようとすると機能します。 なぜこのようなことが起こるのでしょうか? – AnatPort

+0

私はそれが起こらないかもしれないと思う。私はここでダミーデータベースをチェックしました。できます。 - 私に届く@ sujayb7 @ gmail –

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

ありがとうございますが、これで問題は解決しません。 – AnatPort

0

FYI where t2.column1 is not nullは、左結合を結合に変えます。 左結合はすべて最初のテーブルのデータですが、右のテーブル(2番目)にwhere句を指定すると、クエリが強制的に結合になります。これはおそらく、クエリが機能していない理由の原因です。 2番目(右側)の表には一致するデータはありません。

関連する問題