[英]Using Table valued Function in join
有一個表值函數,該函數給出多行作為輸出,有2列作為輸出。
現在,我想在查詢中使用此函數為employees表中的所有employee
我正在使用CROSS APPLY,但是它花費了很長時間,並且沒有得到任何結果。
這是我嘗試過的查詢
select *
from emp A Cross APPLY fnempDiv(A.EmpID)
我正在使用CROSS APPLY
不幸的是,這是CROSS APPLY的本質,因為它是逐行運算符。 它非常適合一些員工行(方便),但從您的描述來看,對於此查詢,應避免使用它,並將APPLY中的查詢擴展到外部查詢。 一個簡單的INNER JOIN應該可以。
CROSS APPLY從APPLY中刪除不產生任何行的emp A
記錄。 OUTER APPLY將保留emp A
記錄。 如果總體上獲得0條記錄,則可能是傳遞了錯誤的列,例如A.EmpID
不是正確的鍵。
如果函數是這樣定義的(根據您的評論):
CREATE FUNCTION dbo.fnempDiv(@EmpID)
RETURNS TABLE AS RETURN
SELECT A.EmpID,D.Name
FROM empdetail A
INNER JOIN empdiv D on A.empID=D.ID
where EXISTS (select * from X)
GO
這根本沒有意義。 Select * from X
或是發生故障,整個查詢或成為啞彈的條件,只需通過在創紀錄的X
或以其他方式。 也未使用輸入參數@EmpID
。
另一方面,如果聲明如下:
CREATE FUNCTION dbo.fnempDiv(@EmpID)
RETURNS TABLE AS RETURN
SELECT A.EmpID,D.Name
FROM empdetail A
INNER JOIN empdiv D on A.empID=D.ID
where A.EmpID = @EmpID
GO
然后,您的完整查詢可以被重寫
select E.*, A.emp_ID as EmpDetail_Emp_ID, D.Name
from emp E
INNER JOIN empdetail A ON E.emp_ID=A.EMP_ID
INNER JOIN empdiv D on A.empID=D.ID
此外,連接A.empID=D.ID
甚至看起來都不正確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.