Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: Oracle EXISTS
Chuck wrote:
> cochrane68_at_hotmail.com wrote in
> news:1118065874.206271.123930_at_g49g2000cwa.googlegroups.com:
>
> > I'm having a little trouble understanding the EXISTS operator. Why
> > do the following SQL statements return a different number of records:
> >
> > SELECT t.id, lt.id
> > FROM table t, link_table lt
> > WHERE lt.id(+) = t.id;
> >
> >
> > SELECT t.id
> > FROM table1 t
> > WHERE
> > EXISTS (
> > SELECT 0
> > FROM link_table1 lt
> > WHERE lt.id(+) = t.id
> > );
> >
> > I thought EXISTS basically allows you to join tables in subselect
> > statements, but there appears to be some subtle differences I'm
> > missing.
> >
> >
>
> The (+) operator is an outter join operator. Your first query is
> returning everything in table that is NOT IN link_table.
>
> In this case I think you are looking for a NOT EXISTS query.
>
> select t.id
> from table t
> where NOT EXISTS (
> select 0
> from link_table lt
> where lt.id = t.id
> );
Incorrect. The outer join returns all matched and unmatched records between the two tables, NOT just those which are unmatched.
As shown below the first query returnes, as expected, all matched and unmatched records between the two tables (I've loaded tables with data, t with ids from 1 through 1000 inclusive, and link_table with values 2 through 1000 where values are even, and I've analyzed the data in both tables; no indexes are present):
SQL> SELECT t.id, lt.id
2 from t, link_table lt
3 WHERE lt.id(+) = t.id;
ID ID
---------- ----------
2 2 4 4 6 6 8 8 10 10 12 12 14 14 16 16 18 18 20 20 22 22 ID ID ---------- ---------- 24 24 26 26 28 28 30 30 32 32 34 34 36 36 38 38 40 40 42 42 44 44 ID ID ---------- ---------- 46 46 48 48 50 50 52 52 54 54 56 56 58 58 60 60 62 62 64 64 66 66 ID ID ---------- ---------- 68 68 70 70 72 72 74 74 76 76 78 78 80 80 82 82 84 84 86 86 88 88 ID ID ---------- ---------- 90 90 92 92 94 94 96 96 98 98 100 100 102 102 104 104 106 106 108 108 110 110 ID ID ---------- ---------- 112 112 114 114 116 116 118 118 120 120 122 122 124 124 126 126 128 128 130 130 132 132 ID ID ---------- ---------- 134 134 136 136 138 138 140 140 142 142 144 144 146 146 148 148 150 150 152 152 154 154 ID ID ---------- ---------- 156 156 158 158 160 160 162 162 164 164 166 166 168 168 170 170 172 172 174 174 176 176 ID ID ---------- ---------- 178 178 180 180 182 182 184 184 186 186 188 188 190 190 192 192 194 194 196 196 198 198 ID ID ---------- ---------- 200 200 202 202 204 204 206 206 208 208 210 210 212 212 214 214 216 216 218 218 220 220 ID ID ---------- ---------- 222 222 224 224 226 226 228 228 230 230 232 232 234 234 236 236 238 238 240 240 242 242 ID ID ---------- ---------- 244 244 246 246 248 248 250 250 252 252 254 254 256 256 258 258 260 260 262 262 264 264 ID ID ---------- ---------- 266 266 268 268 270 270 272 272 274 274 276 276 278 278 280 280 282 282 284 284 286 286 ID ID ---------- ---------- 288 288 290 290 292 292 294 294 296 296 298 298 300 300 302 302 304 304 306 306 308 308 ID ID ---------- ---------- 310 310 312 312 314 314 316 316 318 318 320 320 322 322 324 324 326 326 328 328 330 330 ID ID ---------- ---------- 332 332 334 334 336 336 338 338 340 340 342 342 344 344 346 346 348 348 350 350 352 352 ID ID ---------- ---------- 354 354 356 356 358 358 360 360 362 362 364 364 366 366 368 368 370 370 372 372 374 374 ID ID ---------- ---------- 376 376 378 378 380 380 382 382 384 384 386 386 388 388 390 390 392 392 394 394 396 396 ID ID ---------- ---------- 398 398 400 400 402 402 404 404 406 406 408 408 410 410 412 412 414 414 416 416 418 418 ID ID ---------- ---------- 420 420 422 422 424 424 426 426 428 428 430 430 432 432 434 434 436 436 438 438 440 440 ID ID ---------- ---------- 442 442 444 444 446 446 448 448 450 450 452 452 454 454 456 456 458 458 460 460 462 462 ID ID ---------- ---------- 464 464 466 466 468 468 470 470 472 472 474 474 476 476 478 478 480 480 482 482 484 484 ID ID ---------- ---------- 486 486 488 488 490 490 492 492 494 494 496 496 498 498 500 500 502 502 504 504 506 506 ID ID ---------- ---------- 508 508 510 510 512 512 514 514 516 516 518 518 520 520 522 522 524 524 526 526 528 528 ID ID ---------- ---------- 530 530 532 532 534 534 536 536 538 538 540 540 542 542 544 544 546 546 548 548 550 550 ID ID ---------- ---------- 552 552 554 554 556 556 558 558 560 560 562 562 564 564 566 566 568 568 570 570 572 572 ID ID ---------- ---------- 574 574 576 576 578 578 580 580 582 582 584 584 586 586 588 588 590 590 592 592 594 594 ID ID ---------- ---------- 596 596 598 598 600 600 602 602 604 604 606 606 608 608 610 610 612 612 614 614 616 616 ID ID ---------- ---------- 618 618 620 620 622 622 624 624 626 626 628 628 630 630 632 632 634 634 636 636 638 638 ID ID ---------- ---------- 640 640 642 642 644 644 646 646 648 648 650 650 652 652 654 654 656 656 658 658 660 660 ID ID ---------- ---------- 662 662 664 664 666 666 668 668 670 670 672 672 674 674 676 676 678 678 680 680 682 682 ID ID ---------- ---------- 684 684 686 686 688 688 690 690 692 692 694 694 696 696 698 698 700 700 702 702 704 704 ID ID ---------- ---------- 706 706 708 708 710 710 712 712 714 714 716 716 718 718 720 720 722 722 724 724 726 726 ID ID ---------- ---------- 728 728 730 730 732 732 734 734 736 736 738 738 740 740 742 742 744 744 746 746 748 748 ID ID ---------- ---------- 750 750 752 752 754 754 756 756 758 758 760 760 762 762 764 764 766 766 768 768 770 770 ID ID ---------- ---------- 772 772 774 774 776 776 778 778 780 780 782 782 784 784 786 786 788 788 790 790 792 792 ID ID ---------- ---------- 794 794 796 796 798 798 800 800 802 802 804 804 806 806 808 808 810 810 812 812 814 814 ID ID ---------- ---------- 816 816 818 818 820 820 822 822 824 824 826 826 828 828 830 830 832 832 834 834 836 836 ID ID ---------- ---------- 838 838 840 840 842 842 844 844 846 846 848 848 850 850 852 852 854 854 856 856 858 858 ID ID ---------- ---------- 860 860 862 862 864 864 866 866 868 868 870 870 872 872 874 874 876 876 878 878 880 880 ID ID ---------- ---------- 882 882 884 884 886 886 888 888 890 890 892 892 894 894 896 896 898 898 900 900 902 902 ID ID ---------- ---------- 904 904 906 906 908 908 910 910 912 912 914 914 916 916 918 918 920 920 922 922 924 924 ID ID ---------- ---------- 926 926 928 928 930 930 932 932 934 934 936 936 938 938 940 940 942 942 944 944 946 946 ID ID ---------- ---------- 948 948 950 950 952 952 954 954 956 956 958 958 960 960 962 962 964 964 966 966 968 968 ID ID ---------- ---------- 970 970 972 972 974 974 976 976 978 978 980 980 982 982 984 984 986 986 988 988 990 990 ID ID ---------- ---------- 992 992 994 994 996 996 998 998 1000 1000 693 597 957 185 727 101 ID ID ---------- ---------- 867 567 603 885 715 729 461 627 975 99 805 ID ID ---------- ---------- 403 263 379 545 339 329 13 377 933 127 913 ID ID ---------- ---------- 39 915 459 953 909 335 297 213 951 207 229 ID ID ---------- ---------- 281 249 363 41 591 931 433 469 839 679 109 ID ID ---------- ---------- 113 721 617 381 809 937 509 143 51 527 151 ID ID ---------- ---------- 137 733 587 849 639 455 791 169 749 253 973 ID ID ---------- ---------- 985 847 511 783 495 245 211 803 557 197 79 ID ID ---------- ---------- 575 769 49 725 645 413 147 779 201 175 405 ID ID ---------- ---------- 647 615 373 65 661 133 427 935 999 921 963 ID ID ---------- ---------- 747 123 471 483 649 279 503 351 625 631 11 ID ID ---------- ---------- 33 225 359 91 881 893 15 793 135 869 37 ID ID ---------- ---------- 829 707 997 237 589 939 943 435 565 853 571 ID ID ---------- ---------- 843 689 629 477 431 719 361 665 289 561 5 ID ID ---------- ---------- 255 929 437 529 475 691 81 467 861 987 341 ID ID ---------- ---------- 507 139 559 947 695 601 621 191 321 7 161 ID ID ---------- ---------- 419 239 271 465 285 319 55 827 63 723 877 ID ID ---------- ---------- 17 357 543 563 945 883 307 293 521 155 703 ID ID ---------- ---------- 533 605 187 93 735 423 609 531 583 371 421 ID ID ---------- ---------- 365 777 537 203 857 737 145 231 813 901 43 ID ID ---------- ---------- 811 607 781 657 261 971 311 59 355 163 773 ID ID ---------- ---------- 675 757 183 83 697 391 241 717 473 807 1 ID ID ---------- ---------- 497 541 223 275 895 651 535 349 837 845 447 ID ID ---------- ---------- 709 539 35 117 959 387 305 283 635 751 57 ID ID ---------- ---------- 759 25 167 815 593 917 891 97 995 499 753 ID ID ---------- ---------- 445 965 9 745 859 443 45 801 825 205 75 ID ID ---------- ---------- 741 331 873 103 613 251 667 29 227 189 855 ID ID ---------- ---------- 173 287 755 771 87 407 21 863 979 789 787 ID ID ---------- ---------- 23 927 165 637 677 181 823 301 785 85 487 ID ID ---------- ---------- 449 129 215 983 941 711 547 119 149 89 401 ID ID ---------- ---------- 517 77 549 765 385 199 383 159 681 493 115 ID ID ---------- ---------- 569 291 327 177 153 831 337 27 835 451 833 ID ID ---------- ---------- 47 333 955 767 993 367 221 897 309 555 415 ID ID ---------- ---------- 393 595 705 233 303 265 259 257 795 299 209 ID ID ---------- ---------- 343 875 903 643 71 345 95 907 659 315 369 ID ID ---------- ---------- 219 871 525 655 157 553 247 441 389 923 961 ID ID ---------- ---------- 31 73 323 551 641 633 699 701 817 743 713 ID ID ---------- ---------- 479 581 375 347 967 417 295 887 763 481 125 ID ID ---------- ---------- 313 193 67 585 267 879 653 797 599 991 911 ID ID ---------- ---------- 269 683 579 669 731 685 505 399 411 491 457 ID ID ---------- ---------- 217 573 687 501 179 397 623 61 673 277 739 ID ID ---------- ---------- 819 409 513 611 969 107 69 131 273 671 799 ID ID ---------- ---------- 865 243 489 841 981 949 141 195 453 235 317 ID ID ---------- ---------- 429 121 171 851 3 19 899 775 919 515 519 ID ID ---------- ---------- 905 821 439 463 105 761 577 111 485 663 425 ID ID ---------- ---------- 619 325 925 353 989 889 977 523 53 395
1000 rows selected.
The second query returns the following results:
SQL> SELECT t.id
2 FROM t
3 WHERE
4 EXISTS ( 5 SELECT 0 6 FROM link_table lt 7 WHERE lt.id(+) = t.id 8 ); ID ---------- 652 654 656 658 660 662 664 666 668 670 672 ID ---------- 674 676 678 680 682 684 686 688 690 692 694 ID ---------- 696 698 700 702 704 706 708 710 712 714 716 ID ---------- 718 720 722 724 726 728 730 732 734 736 738 ID ---------- 740 742 744 746 748 750 752 754 756 758 760 ID ---------- 762 764 766 768 770 772 774 776 778 780 782 ID ---------- 784 786 788 790 792 794 796 798 800 802 804 ID ---------- 806 808 810 812 814 816 818 820 822 824 826 ID ---------- 828 830 832 834 836 838 840 842 844 846 848 ID ---------- 850 852 854 856 858 860 862 864 866 868 870 ID ---------- 872 874 876 878 880 882 884 886 888 890 892 ID ---------- 894 896 898 900 902 904 906 908 910 912 914 ID ---------- 916 918 920 922 924 926 928 930 932 934 936 ID ---------- 938 940 942 944 946 948 950 952 954 956 958 ID ---------- 960 962 964 966 968 970 972 974 976 978 980 ID ---------- 982 984 986 988 990 992 994 996 998 1000 2 ID ---------- 4 6 8 10 12 14 16 18 20 22 24 ID ---------- 26 28 30 32 34 36 38 40 42 44 46 ID ---------- 48 50 52 54 56 58 60 62 64 66 68 ID ---------- 70 72 74 76 78 80 82 84 86 88 90 ID ---------- 92 94 96 98 100 102 104 106 108 110 112 ID ---------- 114 116 118 120 122 124 126 128 130 132 134 ID ---------- 136 138 140 142 144 146 148 150 152 154 156 ID ---------- 158 160 162 164 166 168 170 172 174 176 178 ID ---------- 180 182 184 186 188 190 192 194 196 198 200 ID ---------- 202 204 206 208 210 212 214 216 218 220 222 ID ---------- 224 226 228 230 232 234 236 238 240 242 244 ID ---------- 246 248 250 252 254 256 258 260 262 264 266 ID ---------- 268 270 272 274 276 278 280 282 284 286 288 ID ---------- 290 292 294 296 298 300 302 304 306 308 310 ID ---------- 312 314 316 318 320 322 324 326 328 330 332 ID ---------- 334 336 338 340 342 344 346 348 350 352 354 ID ---------- 356 358 360 362 364 366 368 370 372 374 376 ID ---------- 378 380 382 384 386 388 390 392 394 396 398 ID ---------- 400 402 404 406 408 410 412 414 416 418 420 ID ---------- 422 424 426 428 430 432 434 436 438 440 442 ID ---------- 444 446 448 450 452 454 456 458 460 462 464 ID ---------- 466 468 470 472 474 476 478 480 482 484 486 ID ---------- 488 490 492 494 496 498 500 502 504 506 508 ID ---------- 510 512 514 516 518 520 522 524 526 528 530 ID ---------- 532 534 536 538 540 542 544 546 548 550 552 ID ---------- 554 556 558 560 562 564 566 568 570 572 574 ID ---------- 576 578 580 582 584 586 588 590 592 594 596 ID ---------- 598 600 602 604 606 608 610 612 614 616 618 ID ---------- 620 622 624 626 628 630 632 634 636 638 640 ID ---------- 642 644 646 648 650
500 rows selected.
The same result set is returned using an IN condition:
SQL> SELECT t.id
2 FROM t
3 WHERE
4 t.id in ( 5 SELECT lt.id 6 FROM link_table lt 7 WHERE lt.id(+) = t.id 8 ); ID ---------- 652 654 656 658 660 662 664 666 668 670 672 ID ---------- 674 676 678 680 682 684 686 688 690 692 694 ID ---------- 696 698 700 702 704 706 708 710 712 714 716 ID ---------- 718 720 722 724 726 728 730 732 734 736 738 ID ---------- 740 742 744 746 748 750 752 754 756 758 760 ID ---------- 762 764 766 768 770 772 774 776 778 780 782 ID ---------- 784 786 788 790 792 794 796 798 800 802 804 ID ---------- 806 808 810 812 814 816 818 820 822 824 826 ID ---------- 828 830 832 834 836 838 840 842 844 846 848 ID ---------- 850 852 854 856 858 860 862 864 866 868 870 ID ---------- 872 874 876 878 880 882 884 886 888 890 892 ID ---------- 894 896 898 900 902 904 906 908 910 912 914 ID ---------- 916 918 920 922 924 926 928 930 932 934 936 ID ---------- 938 940 942 944 946 948 950 952 954 956 958 ID ---------- 960 962 964 966 968 970 972 974 976 978 980 ID ---------- 982 984 986 988 990 992 994 996 998 1000 2 ID ---------- 4 6 8 10 12 14 16 18 20 22 24 ID ---------- 26 28 30 32 34 36 38 40 42 44 46 ID ---------- 48 50 52 54 56 58 60 62 64 66 68 ID ---------- 70 72 74 76 78 80 82 84 86 88 90 ID ---------- 92 94 96 98 100 102 104 106 108 110 112 ID ---------- 114 116 118 120 122 124 126 128 130 132 134 ID ---------- 136 138 140 142 144 146 148 150 152 154 156 ID ---------- 158 160 162 164 166 168 170 172 174 176 178 ID ---------- 180 182 184 186 188 190 192 194 196 198 200 ID ---------- 202 204 206 208 210 212 214 216 218 220 222 ID ---------- 224 226 228 230 232 234 236 238 240 242 244 ID ---------- 246 248 250 252 254 256 258 260 262 264 266 ID ---------- 268 270 272 274 276 278 280 282 284 286 288 ID ---------- 290 292 294 296 298 300 302 304 306 308 310 ID ---------- 312 314 316 318 320 322 324 326 328 330 332 ID ---------- 334 336 338 340 342 344 346 348 350 352 354 ID ---------- 356 358 360 362 364 366 368 370 372 374 376 ID ---------- 378 380 382 384 386 388 390 392 394 396 398 ID ---------- 400 402 404 406 408 410 412 414 416 418 420 ID ---------- 422 424 426 428 430 432 434 436 438 440 442 ID ---------- 444 446 448 450 452 454 456 458 460 462 464 ID ---------- 466 468 470 472 474 476 478 480 482 484 486 ID ---------- 488 490 492 494 496 498 500 502 504 506 508 ID ---------- 510 512 514 516 518 520 522 524 526 528 530 ID ---------- 532 534 536 538 540 542 544 546 548 550 552 ID ---------- 554 556 558 560 562 564 566 568 570 572 574 ID ---------- 576 578 580 582 584 586 588 590 592 594 596 ID ---------- 598 600 602 604 606 608 610 612 614 616 618 ID ---------- 620 622 624 626 628 630 632 634 636 638 640 ID ---------- 642 644 646 648 650
500 rows selected.
SQL> spool off
This indicates, to me, that the EXISTS query cannot return values from one table where NULLs exist in the subquery. Notice all of the odd valued results are missing, the results which return NULL from link_table with an outer join. And this is where your confusion lies, I believe.
Given the queries you've supplied you'll never get the first result set (that from the straight outer join) from an EXISTS query, even with the outer join in the subquery.
David Fitzjarrell Received on Mon Jun 06 2005 - 10:27:33 CDT