我有兩個SQL表,項目和里程碑:SQL查詢計數元素
項目PK - > ProID
里程碑組合PK - > ProID和MstNo
出於某種原因,我不能使用ProID作爲外鍵將這兩個錶鏈接在一起(FOREIGN KEY約束)。但是,我需要編寫一個查詢,向我顯示所有項目表記錄的詳細信息,以及每個項目的許多里程碑。我可以使用內部連接來實現嗎?我不擅長編寫SQL查詢。
我有兩個SQL表,項目和里程碑:SQL查詢計數元素
項目PK - > ProID
里程碑組合PK - > ProID和MstNo
出於某種原因,我不能使用ProID作爲外鍵將這兩個錶鏈接在一起(FOREIGN KEY約束)。但是,我需要編寫一個查詢,向我顯示所有項目表記錄的詳細信息,以及每個項目的許多里程碑。我可以使用內部連接來實現嗎?我不擅長編寫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的項目沒有里程碑計數還
當您嘗試設置外鍵約束時,遇到什麼樣的錯誤/問題? –
回答你的問題'我可以用內連接來實現嗎?'是'是'。 – Romesh