以下查询有什么问题

时间:2012-09-18 08:25:05

标签: sql sql-server

您好我有一个SQL服务器数据库,当我执行以下查询时,我得到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 Id,我有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都有一个人数。我做错了什么?
我真的没有头绪

3 个答案:

答案 0 :(得分:0)

你正在加入错误的专栏!

您还需要使用HeadCount表上的ID列:

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

此答案基于您的评论:

  

从HC中选择*,其中 ID = 97或 ID = 98或 ID = 99或 ID = 100我得到4个结果

答案 1 :(得分:0)

运行以下查询以确定这些ID上是否存在FK引用:

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

如果它没有任何回报,则意味着这些ID不会作为HeadCount中的Forign Key存在

答案 2 :(得分:0)

如果没有错误但没有数据,则可能没有数据。 也许如果有一个“HeadCount”项目,则没有Department-Item或者没有适合的Empl-Team-Item。

基本上你有一个和 - 连接。显示MyCTE,EmplTeam,Department和HeadCount的所有组合,其中所有三个“开启条件”均有效。