Verwenden von Joins nur, wenn es data in Primärtabelle gibt

Ich habe folgendes Szenario.

Ich habe zwei Tische.

Erster Tisch

SELECT * FROM #REVENUECODES PROCCODE -------- RA MA 

Zweiter Tisch

 SELECT * FROM #REVENUECODESXYZ PROCCODE --------- RA123 MA325 MA582 XY123 YW123 

Ausgezeichnetes Ergebnis

Ich muss in #REVENUECODESXYZ suchen, die mit beginnt ( #REVENUECODES.PROCCODE )

Nach der Abfrage gibt mir die Ausgabe.

 SELECT XY.PROCCODE FROM #REVENUECODESXYZ XY INNER JOIN #REVENUECODES AB ON XY.PROCCODE LIKE (AB.PROCCODE+'%') 

Ich bekomme das:

  PROCCODE -------- RA123 MA325 MA582 

Und das ist auch die gewünschte performance.

Ausfallszenario:

Wenn es keine Werte in der Tabelle #REVENUECODES , dann sollte ich alle data in #REVENUECODESXYZ , was jetzt nicht passiert. Mit meinem aktuellen Code, wenn keine data in #REVENUECODES , dann wegen der Join-Kondition bekomme ich ein leeres Ergebnis.

Ich versuche so etwas zu tun.

 SELECT XY.PROCCODE FROM #REVENUECODESXYZ XY INNER JOIN #REVENUECODES AB ON ( (XY.PROCCODE LIKE (AB.PROCCODE+'%')) or (isnull(AB.PROCCODE, '') = '') ) 

Aber diese Frage gibt mir nichts, wenn #REVENUECODES leer ist, wenn es mir alles in #REVENUECODESXYZ .

Entschuldigungen, ich habe deine Frage nicht richtig gelesen.

Die Ergebnismenge scheint zwei verschiedene NOT EXISTS zu haben – der sauberste path, den ich mir NOT EXISTS kann, ist, die beiden Ergebnisse zusammen zu verbinden und die gegenseitige Exklusivität mit den NOT EXISTS (die INNER JOIN wird nichts zurückgeben, wenn die RHS-Tabelle keine Zeilen hat )

  SELECT XY.PROCCODE FROM #REVENUECODESXYZ XY INNER JOIN #REVENUECODES AB on XY.PROCCODE like (AB.PROCCODE+'%') UNION SELECT XY.PROCCODE FROM #REVENUECODESXYZ XY WHERE NOT EXISTS (SELECT 1 FROM #REVENUECODES) 

Sie verwenden einen INNER JOIN, der nur data zeigt, die zwischen zwei Tabellen passen. Wenn du data in der #REVENUECODESXYZ Tabelle sehen #REVENUECODESXYZ , benutze einen #REVENUECODESXYZ JOIN und einen RIGHT JOIN für umgekehrt.

Benutze eine FULL OUTER-Verknüpfung für alle datadaten, dh: innere + linke + rechte Joins.