2017-12-20 14 views
0

Ausführen Volltextsuche-Abfrage erwartet funktionieren mit Prädikat erfolgreich ENTHÄLT läuft, wenn sie gegen eine einzelne Tabelle gemacht (einfache Abfrage)SQL Server-Volltextsuche mit Join nicht so

SELECT * 
FROM [dbo].[Entity] A 
WHERE CONTAINS(A.EntityName,'Test') 

Diese Abfrage gibt mehrere Ergebnisse die passende Enthält Prädikat.


SELECT * 
FROM [dbo].[Entity] A 
INNER JOIN [dbo].[EntityLink] B 
ON A.Id = B.EntityId 

Diese Abfrage gibt auch mehrere Ergebnisse mit EntityName, die die Phrase-Test in es enthält.


SELECT * 
FROM [dbo].[Entity] A 
INNER JOIN [dbo].[EntityLink] B 
ON A.Id = B.EntityId 
WHERE CONTAINS(A.EntityName,'Test') 

Diese Abfrage liefert keine Ergebnisse. (Ich habe gerade das enthält Prädikat zur zweiten Abfrage hinzugefügt). Ich habe mehrere Optionen ausprobiert, und ich bin ein bisschen frustriert, da es sich nicht wie erwartet verhält. Warum verhindert ein Join, dass es ordnungsgemäß funktioniert? Siehe

+0

Können Sie Beispieldaten hinzufügen, die von Ihrer zweiten Abfrage zurückgegeben werden (die mit 'JOIN', aber ohne' CONTAINS'), und zwar genau jene Zeilen, die das Wort 'Test' enthalten? – andrews

Antwort

0

, wenn die Version mit CONTAINSTABLE alle Daten zurückgibt:

SELECT * 
FROM [dbo].[Entity] A 
INNER JOIN [dbo].[EntityLink] B 
ON A.Id = B.EntityId 
JOIN CONTAINSTABLE([Entity], [EntityName], 'Test') as FTS 
ON FTS.[KEY] = A.Id 

CONTAINSTABLE ist speziell in JOINs verwendet werden soll. Um jedoch 100% genau zu sein, müssen wir die Daten sehen, die von der Abfrage mit JOIN gemäß meinem Kommentar oben zurückgegeben werden.

+0

Das tatsächlich ausgeführt wird, aber immer noch nicht wie erwartet funktioniert. Beispiel mit CONTAINSTABLE: SELECT * FROM CONTAINSTABLE ([Entität], [EntityName], 'Test') -> Liefert erfolgreich alle EntityNames, die Test entsprechen. Wenn Sie jedoch CONTAINSTABLE in CONTAINSTABLE ([Entity], [EntityName], 'Te') ändern, wird kein Ergebnis zurückgegeben (obwohl mehr als 10 Entitätsnamen mit Te beginnen). – MasterOfPuppets