不顯示某字段有重復的記錄 SQL語句


詳細解釋下需求:

    根據某字段(此例中為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來判斷存臨時表,本人沒有測試,在此沒有列出。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM