我有一個簡單的SQL Server 2008數據庫包含兩個表這樣,當在GROUP BY子句指定每個表中的字段:避免使用左聯接
TableA:
(PK)"ID"
"Field"
和
TableB:
(PK)"ID"
(FK)"ID_TableA"
"Field"
我想選擇所有TableA
中的字段以及每個TableA
行中有多少個對應行TableB
:
SELECT A.*,
COUNT(B."ID") as "B's number"
FROM "TableA" A
LEFT JOIN "TableB" B ON (A."ID" = B."ID_TableA")
GROUP BY A."ID", A."Field"
這很好,但我有這個問題:如果TableA
被進一步修改(假設我們必須添加另一個Field2
列),我必須更新SELECT
以上語句以包含GROUP BY
子句中的該字段。
「因爲它不是在聚合函數或GROUP BY子句包含列‘TableA.Field2’在選擇列表中無效」
是:否則,我在執行操作時收到此錯誤有一種方法可以避免這種情況,所以我可以修改我的TableA
而不更新所有像上面那樣的語句?
由於該結果從該查詢設置將破壞任何消耗代碼的新列的存在(或者被忽略這樣的代碼),爲什麼不按照最佳實踐,避免'select *'(EXISTS'除外),並指定這個查詢應該返回的列? (如果它被消費代碼忽略,那麼你正在讓SQL Server做更多的工作,並且可能會迫使效率不高的計劃被用於沒有好處) – 2012-03-10 16:01:20