wake-up-neo.com

INNER JOIN mit Tabellenwertfunktion funktioniert nicht

Ich habe eine Tabellenwertfunktion, die eine Tabelle zurückgibt. Wenn ich versuche, die Tabellenwertfunktion mit einer anderen Tabelle zu JOIN zu bekommen, bekomme ich keine Ergebnisse, aber wenn ich das Ergebnis der Funktion in eine tatsächliche Tabelle kopiere und denselben Join mache, bekomme ich die erwarteten Ergebnisse.

Die Abfrage sieht ungefähr so ​​aus:

Select *
From myTable
INNER JOIN fn_function(@parm1, @param2)
ON ....

Alles in allem habe ich ungefähr 4 solche Abfragen und jede hat eine etwas andere Funktion, aber alle Funktionen erzeugen dieselbe Tabelle, aber unterschiedliche Daten. Für einige dieser Abfragen funktioniert der INNER JOIN, für andere jedoch nicht.

Irgendwelche Vorschläge, warum dies passiert?

28
user2343837

Bei der Tabellenwertfunktion verwenden Sie im Allgemeinen Cross Apply

Select *
From myTable m
CROSS APPLY fn_function(m.field1, m.field2)
61
Anup Agrawal

Ich denke das sollte funktionieren

  Select * 
    From Animals 
    Join dbo.AnimalsTypesIds(900343) 
      As AnimalsTypes
      On AnimalsTypes.TypeId = Animals.TypeId

In Tabellenwertfunktionen sollte die Rückgabetabelle TypeId aufweisen, damit der Join für diese Klausel funktioniert

1

Wenn wir einige Annahmen machten, dass Parameter von Tabellenwertfunktionen nicht dynamisch von myTable-Spalten abhängen, funktioniert dies.

   SELECT *
    FROM myTable 
    INNER JOIN

    (SELECT * from fn_function(@para1, @para2 etc))
 ON ...

wenn die Parameter jedoch von myTable abhängig sind, funktioniert dies nicht

1
user2343837

Ihre "ON" -Klausel des Joins ist höchstwahrscheinlich falsch. Vielleicht ein kleiner Tippfehler 

JOIN x ON oID = odID

anstatt

JOIN x ON oID = oID

0
nicko