我有两个 SQL 表,项目和里程碑:
项目 PK -> ProID
里程碑组合 PK -> ProID 和 MstNo
出于某种原因,我不能使用 ProID 作为外键将这两个表链接在一起(FOREIGN KEY 约束)。但是,我需要编写一个查询来显示所有 Projects 表记录的详细信息,以及每个项目的一些里程碑。我可以使用内部联接以某种方式实现这一目标吗?我不擅长编写 SQL 查询。
我有两个 SQL 表,项目和里程碑:
项目 PK -> ProID
里程碑组合 PK -> ProID 和 MstNo
出于某种原因,我不能使用 ProID 作为外键将这两个表链接在一起(FOREIGN KEY 约束)。但是,我需要编写一个查询来显示所有 Projects 表记录的详细信息,以及每个项目的一些里程碑。我可以使用内部联接以某种方式实现这一目标吗?我不擅长编写 SQL 查询。
试试这个——
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
是的你可以。inner join
在声明的条件下将一个表中的数据与另一个表匹配。
select * from Projects inner join Milestones on Projects.ProId = Milestones.ProID
.
此查询将从Projects
表中读取所有数据并匹配来自Milestones
.
结果,您将拥有两个表中都具有 ProId 的实体。
SELECT P.ProID ,
COUNT(M.*)
FROM Projects P
LEFT JOIN Milestones M
ON M.ProID = P.ProID
GROUP BY P.ProID
如果我得到了表格结构,你应该写一些类似的东西
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 计数的项目还没有里程碑