Ignorieren, SQL INNER JOIN, wenn es keine Datensätze zu kommen?

Habe ich die folgenden Join -

INNER JOIN @SynonymTable AS A ON ([Products].[Title] LIKE A.[Synonym])

Den @SynonymTable Tabelle variable enthält (wenn erforderlich) eine Liste der Elemente, die Begriffe wie:

%shirt%
%blouse%
%petticoat%

Diese basieren alle auf einer Liste der Synonyme für ein bestimmtes keyword-Suche, wie der Begriff 'shirt' - daraus kann ich dann alle items finden, die möglicherweise im Zusammenhang usw. Das problem ist, dass, wenn es kein Stichwort geliefert, die Abfrage offensichtlich nicht alles mitmachen.

Ist es sowieso zu beseitigen, die Verknüpfung oder die Rückgabe aller Elemente, wenn es keine Elemente in der synonym-Tabelle?

Ich gefunden habe, die Beiträge wie Bypass Letzte INNER JOIN in der Abfrage aber bin nicht in der Lage, um es an die Arbeit für mein Szenario?

Jede Hilfe oder Beratung wäre toll.

  • Ich könnte nicht den Punkt, aber warum gehst du nicht mit einem left outer join?
  • dann die falschen Produkte zurückgegeben werden, wenn die Tabelle gefüllt
  • Ich denke, @Mithrandir hat Recht: mit einem LEFT JOIN wird es wieder alle die record matching-ein versehen "Synonym" und auch die nicht übereinstimmenden Datensatz mit join-Feld NULL
  • left join erhalten Sie alle Datensätze von den Produkten und wenn es einen Datensatz in Synonyme es wird geben Sie info auf, dass 2 oder mehrere Zeilen.
  • Können Sie überprüfen die @SynonymTable bevor die Abfrage ausgeführt wird, um zu sehen, wenn ein Eintrag vorhanden ist, und wenn nicht, dann legen Sie % hinein, so dass die Abfrage alles?
  • gut, man könnte verwenden unterschiedliche zu unterdrücken, dass ...
  • Das problem dabei ist, dass es dann wieder Duplikate Zeilen aus der [Produkte] - Tabelle.
  • Ich habe versucht, die früheren und für einige Grund, es kam nicht wieder, überhaupt nichts.
  • disticnt weiterhin erhalten Sie falsche Ergebnisse, ex prod Tabelle aa-bb-syn-Tabelle hat %eine% dann select distinct * from prod left join syn auf prod.Titel WIE syn.Synonym wird geben Sie 2 decords 1) aa %a% und 2) bb null
  • Sie können verwenden Sie eine LEFT JOIN-in diesem Fall mit <Spalte> IST NICHT NULL ODER NICHT VORHANDEN ist ... -> es sollte genau das tun, was Sie benötigen

InformationsquelleAutor Nathan | 2013-01-03
Schreibe einen Kommentar