0

我有两个 SQL 表,项目和里程碑:

项目 PK -> ProID

里程碑组合 PK -> ProID 和 MstNo

出于某种原因,我不能使用 ProID 作为外键将这两个表链接在一起(FOREIGN KEY 约束)。但是,我需要编写一个查询来显示所有 Projects 表记录的详细信息,以及每个项目的一些里程碑。我可以使用内部联接以某种方式实现这一目标吗?我不擅长编写 SQL 查询。

4

4 回答 4

2

试试这个——

SELECT 
       P.*
     , cnt = ISNULL(M.cnt, 0)
FROM dbo.Projects P
LEFT JOIN (
     SELECT ProID, cnt = COUNT(1) 
     FROM dbo.Milestones
     GROUP BY ProID
) M ON M.ProID = P.ProID
于 2013-07-25T09:26:02.610 回答
0

是的你可以。inner join在声明的条件下将一个表中的数据与另一个表匹配。

select * from Projects inner join Milestones on Projects.ProId = Milestones.ProID.

此查询将从Projects表中读取所有数据并匹配来自Milestones.

结果,您将拥有两个表中都具有 ProId 的实体。

于 2013-07-25T09:24:11.233 回答
0
SELECT P.ProID ,
       COUNT(M.*)
FROM   Projects P
       LEFT JOIN Milestones M
           ON M.ProID = P.ProID
GROUP BY P.ProID 
于 2013-07-25T09:24:15.210 回答
0

如果我得到了表格结构,你应该写一些类似的东西

SELECT
  ProID,
  count(*) as MstNo
FROM projects
LEFT JOIN milestones ON projects.ProID=milestones.ProID
GROUP BY ProID

更好

SELECT
  ProID,
  sum(
    CASE WHEN milestones.ProID is null THEN 0 ELSE 1 END
  ) as MstNo
FROM projects
LEFT JOIN milestones ON projects.ProID=milestones.ProID
GROUP BY ProID

通过这种方式,您将有 0 计数的项目还没有里程碑

于 2013-07-25T09:25:12.603 回答