2012-09-18 48 views
0

您好我有一個SQL Server數據庫,當我執行下面的查詢,我得到4個結果:有什麼不對下面的查詢

WITH MyCTE (ID, hasLead, SubgroupFk, SubTeamFk) 
AS (
SELECT [ID],[hasLead],[SubgroupFk],[SubTeamFk] 
FROM [LocalGTPDatabase].[dbo].[LinkProject-Area] 
where [ProjectFk]=90 
) 
SELECT 
* 
FROM MyCTE 
INNER JOIN EmplTeam ON EmplTeam.ID = MyCTE.SubTeamFk 
INNER JOIN [Department] ON [Department].ID = MyCTE.SubgroupFk 

每LinkProjectArea標識我有1人頭項/年
招聘人數表連接搭配:LinkProjectAreaFk以前提到的表

所以我想我可以用人數下面的查詢相結合:

WITH MyCTE (ID, hasLead, SubgroupFk, SubTeamFk) 
AS (
SELECT [ID],[hasLead],[SubgroupFk],[SubTeamFk] 
FROM [LocalGTPDatabase].[dbo].[LinkProject-Area] 
where [ProjectFk]=90 
) 
SELECT 
* 
FROM MyCTE 
INNER JOIN EmplTeam ON EmplTeam.ID = MyCTE.SubTeamFk 
INNER JOIN [Department] ON [Department].ID = MyCTE.SubgroupFk 
INNER JOIN [HeadCount] ON [HeadCount].LinkProjectAreaFk = MyCTE.ID 

但是當我執行這個查詢時,我得不到任何結果,但是這個查詢的每個ID都有一個人數。我究竟做錯了什麼?
我真的沒有線索

+0

可能是數據可以幫助我們來幫助您... – tschmit007

+0

您是否嘗試過使用LEFT JOIN而不是INCORE JOIN由HeadCount進行測試,您可以看到4個結果,並且您可以檢查是否存在連接或沒有連接 –

+0

當我使用左連接所有來自HC表= NULL的數據,但從第一個查詢的ID的結果是:97,98,99,100,當我執行此查詢時:選擇*從HC其中ID = 97或ID = 98或ID = 99或ID = 100我得到4個結果 – Jelle

回答

0

如果您沒有錯誤,但沒有數據,則可能沒有數據。 也許如果有「HeadCount」項目,則沒有Department-Item或沒有適合的Empl-Team-Item。

基本上你有一個和連接。顯示MyCTE,EmplTeam,Department和HeadCount的所有組合,其中您的三個「ON-Conditions」都是有效的。

0

你加入了錯誤的專欄!

您也需要使用ID列上人數表:

INNER JOIN [HeadCount] ON [HeadCount].ID = MyCTE.ID 

這個答案是基於您的評論:

選擇HC *其中ID = 97或ID = 98或ID = 99或ID = 100我得到4個結果

0

運行下面的查詢可以肯定,是對那些ID或不存在FK參考:

SELECT * 
FROM HeadCount 
WHERE HeadCount.LinkProjectAreaFk IN 
(SELECT [ID] 
FROM [LinkProject-Area] 
where [ProjectFk]=90) 

,如果它有沒有返回它意味着,這些ID不存在作爲HeadCount中的Forign密鑰