回答

收藏

单个查询以删除和显示重复记录

技术问答 技术问答 243 人阅读 | 0 人回复 | 2023-09-14

采访中提出的一个问题是,
( S, q1 t- [4 s+ a- {9 t) U% I6 @4 @2 K* b% B" e
一张表有100条记录。其中有50个重复。是否可以通过单个查询从表中删除重复的记录,以及选择并显示剩余的50条记录。
5 H* l' C& A- p/ G" v5 u1 m6 [& ]1 S

; S$ E% u$ P$ v" C$ y3 N1 c) x' R6 F在单个SQL查询中有可能吗?
7 r( T- }3 m) k; n! Q! Q8 {谢谢1 J; V$ _9 O6 X- R( ~4 j
国民账户体系
# |& A7 g5 f9 y$ H' K, \5 N                1 w# ^( R2 Y" f4 ^, M% s& P
解决方案:
8 _( q( f" E- x! o% O" _                3 \. e2 Q0 b$ a- M- _: q
$ H9 O" P1 {# H$ C

* `2 C8 w9 ~1 z* |5 J) c1 _& a                与SQL Server,您将使用类似这样的东西
6 d: n" i2 T; s/ c/ L4 T5 I( ODECLARE @Table TABLE (ID INTEGER, PossibleDuplicate INTEGER)
9 R, ]6 h3 ]4 O0 n4 x/ JINSERT INTO @Table VALUES (1, 100)  V$ b4 k. g$ X2 G( E+ @0 e& `2 {
INSERT INTO @Table VALUES (2, 100)
* e1 d$ k7 _( Q, W) A3 n* I: eINSERT INTO @Table VALUES (3, 200)
8 ]) Y9 K' m3 ?INSERT INTO @Table VALUES (4, 200)# |6 C: _* e' w. E
DELETE FROM @Table
" G8 w; h" f: J4 BOUTPUT Deleted.*
5 g8 Z5 j9 C* U9 e$ p& Y; K+ NFROM  @Table t
1 v' g. v4 C' ?      INNER JOIN (
; O7 w0 {7 f6 p2 e: H- \- w& |        SELECT    ID = MAX(ID)
8 X! J/ b9 ?6 a- p2 G9 W. w        FROM      @Table) L# S" }5 F/ S* @9 b: |
        GROUP BY  PossibleDuplicate' O  ~; C8 d" y( E
        HAVING    COUNT(*) > 1
/ u) x  o7 r1 w" B1 w6 a- w8 ?1 G% y      ) d ON d.ID = t.ID5 ~: j6 ]8 t5 z. P' H; U
该OUTPUT声明显示,被删除的记录。
3 `$ l; b7 R& l更新:
' G. t. Q: A2 c" x上面的查询将删除重复项,并为您提供被删除的行,而不是剩余的行。如果这对您很重要(总而言之,其余的50行应与删除的50行相同),则可以使用SQLServer的2008 MERGE语法来实现。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则