詳細解釋下需求:
根據某字段(此例中為StateProvinceID)做判斷,如果發現表中該字段有重復值,則結果不顯示該條記錄。
一,最直接的方法,效率低
1 SELECT * FROM 2 ( 3 SELECT StateProvinceID FROM 4 ( 5 SELECT COUNT(*) AS num ,ad.StateProvinceID 6 FROM Person.Address ad 7 GROUP BY StateProvinceID 8 )AS tt 9 WHERE tt.num<2 --排除重復 10 ) AS tab 11 INNER JOIN Person.Address addr ON tab.StateProvinceID=addr.StateProvinceID
二、使用了CTE
1 with t1 2 AS( 3 SELECT 4 * FROM Person.Address --WHERE AddressID<200 5 ), 6 t2 7 AS( 8 SELECT 9 COUNT(*) AS num , 10 t1.StateProvinceID 11 FROM t1 12 GROUP BY StateProvinceID 13 ) 14 SELECT * FROM T2 15 INNER JOIN T1 ON t2.StateProvinceID = t1.StateProvinceID 16 WHERE t2.num<2
三、最終版
1 with t2 2 AS( 3 SELECT 4 COUNT(*) AS num , 5 t1.StateProvinceID 6 FROM Person.Address t1 7 GROUP BY StateProvinceID 8 ) 9 SELECT * FROM 10 ( 11 SELECT T2.StateProvinceID FROM t2 WHERE num<2 12 ) AS T3 13 INNER JOIN Person.Address t1 ON T3.StateProvinceID=t1.StateProvinceID
還聽到有人說可以寫個func來判斷存臨時表,本人沒有測試,在此沒有列出。