我有两个SQL表,项目和里程碑:
项目PK - > ProID
里程碑结合PK - > ProID和MstNo
由于某种原因,我无法使用ProID作为外键将这两个表链接在一起(FOREIGN KEY约束)。但是,我需要编写一个查询,它将显示所有Projects表记录的详细信息,以及每个项目的许多里程碑。我可以使用内部联接以某种方式实现吗?我不擅长编写SQL查询。
答案 0 :(得分: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
答案 1 :(得分:0)
是的,你可以。 inner join
匹配声明条件下一个表与另一个表的数据。
select * from Projects inner join Milestones on Projects.ProId = Milestones.ProID
。
此查询将读取Projects
表中的所有数据,并与来自Milestones
的数据进行匹配。
在结果中,您将拥有两个表中都有ProId的实体。
答案 2 :(得分:0)
SELECT P.ProID ,
COUNT(M.*)
FROM Projects P
LEFT JOIN Milestones M
ON M.ProID = P.ProID
GROUP BY P.ProID
答案 3 :(得分: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的计数