这是一次实验,为这次实验需要准备一张表,建表语句如下。
create table emp1( id int, name nvarchar2(20));
为了让这表的id字段有重复可以这样给它插值:
insert into emp1 select dbms_random.value(1,1000), dbms_random.string('*',dbms_random.value(1,20)) from dual connect by level<2000;
然后,对id分组,查看每组中数量多于一个的就大体知道重复的情况了。
select count(*) as cnt,id from emp1 group by id having count(*)>1
要知道将要删除多少数据可以把上面的语句做个子查询,然后把cnt字段统计起来。
select sum(cnt) from (select count(*)-1 as cnt from emp1 group by id having count(*)>1)
上面多了一个-1,那是因为重复的组还需要保留一条。
也可以执行下面的语句查看将要删除的记录数。
select count(*) from emp1 a where a.rowid<(select max(rowid) from emp1 b where a.id=b.id)
要删除重复记录把上面的语句从查询改成删除就好了。
delete from emp1 a where a.rowid<(select max(rowid) from emp1 b where a.id=b.id)
删完后,就可以给id列加上主键了。
alter table emp1 add constraint emp1_pk primary key(id);
上面实验所有的SQL执行情况如下:
1 SQL> drop table emp1; 2 3 表已删除。 4 5 SQL> create table emp1( 6 2 id int, 7 3 name nvarchar2(20)); 8 9 表已创建。 10 11 SQL> insert into emp1 12 2 select dbms_random.value(1,1000), 13 3 dbms_random.string('*',dbms_random.value(1,20)) 14 4 from dual 15 5 connect by level<2000; 16 17 已创建1999行。 18 19 SQL> commit; 20 21 提交完成。 22 23 SQL> select count(*) as cnt,id from emp1 group by id having count(*)>1; 24 25 CNT ID 26 ---------- ---------- 27 3 785 28 4 465 29 5 742 30 3 180 31 2 604 32 3 861 33 2 670 34 2 787 35 3 310 36 3 477 37 2 647 38 39 CNT ID 40 ---------- ---------- 41 2 606 42 3 380 43 2 619 44 3 851 45 6 719 46 3 730 47 3 167 48 4 363 49 3 100 50 3 756 51 3 665 52 53 CNT ID 54 ---------- ---------- 55 2 400 56 4 83 57 2 889 58 2 555 59 2 729 60 3 918 61 2 309 62 2 691 63 4 123 64 2 614 65 2 967 66 67 CNT ID 68 ---------- ---------- 69 3 786 70 3 658 71 4 34 72 2 468 73 3 472 74 4 988 75 4 198 76 2 692 77 3 498 78 2 337 79 3 30 80 81 CNT ID 82 ---------- ---------- 83 2 51 84 3 964 85 2 247 86 3 355 87 2 1000 88 2 625 89 2 724 90 4 789 91 2 537 92 4 54 93 3 408 94 95 CNT ID 96 ---------- ---------- 97 2 878 98 2 989 99 2 948 100 2 173 101 2 826 102 3 303 103 2 584 104 4 679 105 3 895 106 4 44 107 4 28 108 109 CNT ID 110 ---------- ---------- 111 2 974 112 4 209 113 2 457 114 2 976 115 2 47 116 4 218 117 3 620 118 4 290 119 2 462 120 2 475 121 3 157 122 123 CNT ID 124 ---------- ---------- 125 5 394 126 3 534 127 2 134 128 3 903 129 2 728 130 3 76 131 2 522 132 3 459 133 2 128 134 6 235 135 7 541 136 137 CNT ID 138 ---------- ---------- 139 2 494 140 2 631 141 3 356 142 3 387 143 3 6 144 3 29 145 3 949 146 2 217 147 5 762 148 4 558 149 4 883 150 151 CNT ID 152 ---------- ---------- 153 4 435 154 2 807 155 4 779 156 2 518 157 3 424 158 2 469 159 3 652 160 3 369 161 2 59 162 2 120 163 2 671 164 165 CNT ID 166 ---------- ---------- 167 2 696 168 3 307 169 2 13 170 2 608 171 2 985 172 2 821 173 2 573 174 2 607 175 3 642 176 5 880 177 2 844 178 179 CNT ID 180 ---------- ---------- 181 3 121 182 4 923 183 2 682 184 2 651 185 2 965 186 2 386 187 2 271 188 2 560 189 2 207 190 5 299 191 4 894 192 193 CNT ID 194 ---------- ---------- 195 3 155 196 3 378 197 3 862 198 2 297 199 2 708 200 2 966 201 2 854 202 3 327 203 2 853 204 2 827 205 3 141 206 207 CNT ID 208 ---------- ---------- 209 3 587 210 4 858 211 2 492 212 3 181 213 5 782 214 2 70 215 3 881 216 3 250 217 2 774 218 2 479 219 5 715 220 221 CNT ID 222 ---------- ---------- 223 3 538 224 2 983 225 5 628 226 3 390 227 6 253 228 3 90 229 2 425 230 2 418 231 3 26 232 3 251 233 3 793 234 235 CNT ID 236 ---------- ---------- 237 3 535 238 3 543 239 2 429 240 2 340 241 2 657 242 2 713 243 3 993 244 2 444 245 5 937 246 3 586 247 2 463 248 249 CNT ID 250 ---------- ---------- 251 3 567 252 3 410 253 3 570 254 3 806 255 3 461 256 3 377 257 3 21 258 4 298 259 3 596 260 2 433 261 4 899 262 263 CNT ID 264 ---------- ---------- 265 7 229 266 4 258 267 2 502 268 2 992 269 2 249 270 2 917 271 2 132 272 2 572 273 2 86 274 2 626 275 2 704 276 277 CNT ID 278 ---------- ---------- 279 3 112 280 3 758 281 3 500 282 3 661 283 3 382 284 2 365 285 4 273 286 2 935 287 3 185 288 3 412 289 3 727 290 291 CNT ID 292 ---------- ---------- 293 2 941 294 2 205 295 2 593 296 4 962 297 2 177 298 2 874 299 3 404 300 3 648 301 3 20 302 2 224 303 2 66 304 305 CNT ID 306 ---------- ---------- 307 2 149 308 5 133 309 2 499 310 2 896 311 3 96 312 2 565 313 2 991 314 2 687 315 4 532 316 4 215 317 3 694 318 319 CNT ID 320 ---------- ---------- 321 5 556 322 2 891 323 3 374 324 5 329 325 3 284 326 3 945 327 3 432 328 3 867 329 2 549 330 5 697 331 3 360 332 333 CNT ID 334 ---------- ---------- 335 3 367 336 4 183 337 6 191 338 3 609 339 3 416 340 4 439 341 4 496 342 2 300 343 3 505 344 2 163 345 3 46 346 347 CNT ID 348 ---------- ---------- 349 2 270 350 2 53 351 2 744 352 3 845 353 3 117 354 2 24 355 5 164 356 4 81 357 3 296 358 4 764 359 4 521 360 361 CNT ID 362 ---------- ---------- 363 3 467 364 4 720 365 2 359 366 3 85 367 3 685 368 3 162 369 4 613 370 2 398 371 4 354 372 2 622 373 3 240 374 375 CNT ID 376 ---------- ---------- 377 2 526 378 3 161 379 3 741 380 4 201 381 2 669 382 2 542 383 5 583 384 3 349 385 2 314 386 3 119 387 2 285 388 389 CNT ID 390 ---------- ---------- 391 4 887 392 3 509 393 2 184 394 2 836 395 2 510 396 2 32 397 4 777 398 4 698 399 2 35 400 4 663 401 4 959 402 403 CNT ID 404 ---------- ---------- 405 4 48 406 2 820 407 6 212 408 3 453 409 4 721 410 3 592 411 4 938 412 4 848 413 4 336 414 4 392 415 2 276 416 417 CNT ID 418 ---------- ---------- 419 3 350 420 2 533 421 2 553 422 2 840 423 2 710 424 3 23 425 3 995 426 2 516 427 2 61 428 2 8 429 3 55 430 431 CNT ID 432 ---------- ---------- 433 4 849 434 6 175 435 2 977 436 3 634 437 3 301 438 2 908 439 2 761 440 2 389 441 2 707 442 2 456 443 3 527 444 445 CNT ID 446 ---------- ---------- 447 4 264 448 3 206 449 3 110 450 2 830 451 3 603 452 3 879 453 3 689 454 5 664 455 5 135 456 5 37 457 3 754 458 459 CNT ID 460 ---------- ---------- 461 2 426 462 2 637 463 4 856 464 2 318 465 3 783 466 2 629 467 2 987 468 3 328 469 3 69 470 3 344 471 3 239 472 473 CNT ID 474 ---------- ---------- 475 2 402 476 2 654 477 3 550 478 5 700 479 2 686 480 2 750 481 2 486 482 4 342 483 2 370 484 2 226 485 2 831 486 487 CNT ID 488 ---------- ---------- 489 2 748 490 2 449 491 2 799 492 3 375 493 4 430 494 5 261 495 3 568 496 2 41 497 2 451 498 4 228 499 3 33 500 501 CNT ID 502 ---------- ---------- 503 2 443 504 2 563 505 2 575 506 5 508 507 3 994 508 2 93 509 3 266 510 2 736 511 4 130 512 2 341 513 2 952 514 515 CNT ID 516 ---------- ---------- 517 3 368 518 2 798 519 4 80 520 3 277 521 4 107 522 4 585 523 2 946 524 2 866 525 3 926 526 2 376 527 2 643 528 529 CNT ID 530 ---------- ---------- 531 2 828 532 3 956 533 2 514 534 3 850 535 2 913 536 3 254 537 6 915 538 3 886 539 3 101 540 2 795 541 2 99 542 543 CNT ID 544 ---------- ---------- 545 2 973 546 3 659 547 3 939 548 4 667 549 2 140 550 6 876 551 2 591 552 3 545 553 2 525 554 2 909 555 2 233 556 557 CNT ID 558 ---------- ---------- 559 3 434 560 5 792 561 2 440 562 4 898 563 4 512 564 4 753 565 3 165 566 2 436 567 2 766 568 3 362 569 2 598 570 571 CNT ID 572 ---------- ---------- 573 3 942 574 2 243 575 2 900 576 2 238 577 2 131 578 2 873 579 4 552 580 4 334 581 3 511 582 4 476 583 3 953 584 585 CNT ID 586 ---------- ---------- 587 3 401 588 4 36 589 2 981 590 4 18 591 2 546 592 2 414 593 5 822 594 2 259 595 3 760 596 3 172 597 2 421 598 599 CNT ID 600 ---------- ---------- 601 2 969 602 2 287 603 2 27 604 3 927 605 3 871 606 5 503 607 4 530 608 3 176 609 4 971 610 2 236 611 2 146 612 613 CNT ID 614 ---------- ---------- 615 5 186 616 2 64 617 3 716 618 5 984 619 4 910 620 4 924 621 2 124 622 7 579 623 4 746 624 2 490 625 2 221 626 627 CNT ID 628 ---------- ---------- 629 3 751 630 3 890 631 5 145 632 3 517 633 5 865 634 2 3 635 4 446 636 5 547 637 3 171 638 2 907 639 3 442 640 641 CNT ID 642 ---------- ---------- 643 2 819 644 3 788 645 2 142 646 2 863 647 4 405 648 2 870 649 4 278 650 4 304 651 2 998 652 2 864 653 5 89 654 655 CNT ID 656 ---------- ---------- 657 2 571 658 3 319 659 2 58 660 2 936 661 4 454 662 2 884 663 2 641 664 2 722 665 2 911 666 3 115 667 2 154 668 669 CNT ID 670 ---------- ---------- 671 3 928 672 2 612 673 2 808 674 2 267 675 2 7 676 6 174 677 4 62 678 3 345 679 2 388 680 4 9 681 3 406 682 683 CNT ID 684 ---------- ---------- 685 3 139 686 2 838 687 2 524 688 3 705 689 6 305 690 2 551 691 3 842 692 5 204 693 7 812 694 5 737 695 3 493 696 697 CNT ID 698 ---------- ---------- 699 2 531 700 5 281 701 2 282 702 4 16 703 3 617 704 2 752 705 3 940 706 4 961 707 2 676 708 2 12 709 4 796 710 711 CNT ID 712 ---------- ---------- 713 3 706 714 6 197 715 2 809 716 3 501 717 3 160 718 2 373 719 2 885 720 3 548 721 4 768 722 3 960 723 3 802 724 725 CNT ID 726 ---------- ---------- 727 6 428 728 2 690 729 3 103 730 2 539 731 5 602 732 3 60 733 3 67 734 2 10 735 2 118 736 2 219 737 2 487 738 739 CNT ID 740 ---------- ---------- 741 4 272 742 2 711 743 4 818 744 2 92 745 2 348 746 2 237 747 3 488 748 3 660 749 3 448 750 2 73 751 2 912 752 753 CNT ID 754 ---------- ---------- 755 2 39 756 2 79 757 4 958 758 2 361 759 2 589 760 4 156 761 2 65 762 2 127 763 2 644 764 2 317 765 3 320 766 767 CNT ID 768 ---------- ---------- 769 4 930 770 2 302 771 2 19 772 2 843 773 2 800 774 2 823 775 2 656 776 3 624 777 2 666 778 2 106 779 2 794 780 781 CNT ID 782 ---------- ---------- 783 2 150 784 2 126 785 3 346 786 3 313 787 3 122 788 789 已选择599行。 790 791 SQL> select sum(cnt) from 792 2 (select count(*)-1 as cnt from emp1 group by id having count(*)>1); 793 794 SUM(CNT) 795 ---------- 796 1137 797 798 SQL> select count(*) from emp1 a where a.rowid<(select max(rowid) from emp1 b where a.id=b.id); 799 800 COUNT(*) 801 ---------- 802 1137 803 804 SQL> delete from emp1 a where a.rowid<(select max(rowid) from emp1 b where a.id=b.id); 805 806 已删除1137行。 807 808 SQL> alter table emp1 add constraint emp1_pk primary key(id); 809 810 表已更改。 811 812 SQL>
-END-