Ankündigung

Einklappen
Keine Ankündigung bisher.

Oracle: Vergleichen zweier Listen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Oracle: Vergleichen zweier Listen

    Hallo,

    ich habe ein Problem!
    • Ich habe zwei Tabellen (Tabelle A und Tabelle B)
    • In Tabelle A ist eine Spalte mit dem Namen "IDE_IDEAOWNER" (Inhalt ist ein "Personal-Nr." -> INT unsigned)
    • In Tabelle B ist eine Spalte mit dem Namen "SU_PERSNUM" (Inhalt ist ein "Personal-Nr." -> INT unsigned)
    Nun möchte ich gerne wissen wie viele Mitarbeiter in den beiden Listen vorkommen ohne Duplikate (Ein Mitarbeiter darf also nicht in der einen und der anderen Liste vorkommen).

    Hättest Du einen Tipp für mich wie ich das umsetzen könnte?

    Gruß

  • #2
    Mit einem JOIN und t1.id <> t2.id

    Kommentar


    • #3
      Code:
      test=*# with x as (select s from generate_series(1,5)s), y as (select s from generate_series(2,8) s) select * from x union select * from y order by 1;
       s
      ---
       1
       2
       3
       4
       5
       6
       7
       8
      (8 rows)
      
      test=*#
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        akretschmer
        "Ein Mitarbeiter darf also nicht in der einen und der anderen Liste vorkommen"

        Kommentar


        • #5
          ja, dieser werden auch nur einmal angezeigt. Im Gegensatz zu UNION ALL
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            ich verstehe ihn so, um bei deinem Beispiel zu bleiben, dass dann 2,3,4,5 nicht aufgeführt werden sollen.

            Kommentar


            • #7
              Ich verstehe es so:
              PHP-Code:
              select from
              (select ida from ta minus select idb from tbb
              union
              select 
              from
              (select idb from tb minus select ida from ta

              Kommentar


              • #8
                Ich schreibs noch mal, weil es zwar einen Link auf meinen Beitrag gibt, aber dieser nicht angezeigt wird.

                Ich verstehe es so:
                PHP-Code:
                select from
                (select ida from ta minus select idb from tbb
                union
                select 
                from
                (select idb from tb minus select ida from ta

                Kommentar


                • #9
                  Hallo,

                  ich habe es probiert aber es kommt ein fehlerhaftes Ergebnis raus.

                  Tabelle A -> IDE_IDEAOWNER
                  • 100
                  • 105
                  • 110
                  • 201
                  • 200
                  • 201


                  Tabelle B -> SU_PERSNUM
                  • 100
                  • 320
                  • 301
                  • 201
                  • 200
                  • 201
                  • 403
                  • 402

                  Ergebnis sollte sein:
                  • 100
                  • 105
                  • 110
                  • 201
                  • 200
                  • 320
                  • 301
                  • 403
                  • 402

                  Ich habe schon gegoogelt aber leider ohne erfolg...


                  Kommentar


                  • #10
                    Ich finde keine Lösung... auch nicht in google

                    Kommentar


                    • #11
                      Mach mal ein sqlfiddle dazu.

                      Kommentar


                      • #12
                        also war mein Vorschlag in #3 exakt passend. Kannst Du nicht einmal abschreiben?

                        Code:
                        test=*# create table a(i int);
                        CREATE TABLE
                        test=*# create table b(i int);
                        CREATE TABLE
                        test=*# copy a from stdin;
                        Enter data to be copied followed by a newline.
                        End with a backslash and a period on a line by itself, or an EOF signal.
                        >> 100
                        >> 105
                        >> 110
                        >> 201
                        >> 200
                        >> 201
                        >> \.
                        COPY 6
                        test=*# copy b from stdin;
                        Enter data to be copied followed by a newline.
                        End with a backslash and a period on a line by itself, or an EOF signal.
                        >> 100
                        >> 320
                        >> 301
                        >> 201
                        >> 200
                        >> 201
                        >> 403
                        >> 402
                        >> \.
                        COPY 8
                        test=*# select * from a union select * from b order by 1;
                          i  
                        -----
                         100
                         105
                         110
                         200
                         201
                         301
                         320
                         402
                         403
                        (9 rows)
                        
                        test=*#
                        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                        Kommentar


                        • #13
                          *edit* Query ist quatsch. Anforderung falsch Verstanden (xor). Und ich versteh die Anforderungen auch nicht wenn das UNION von akretschmer nicht die "Lösung" ist.

                          Code:
                          SELECT
                              COALESCE(a.pnr, b.pnr) AS pnr
                          FROM
                              a FULL OUTER JOIN
                              b ON (a.pnr = b.pnr)
                          WHERE
                              a.pnr IS NULL OR
                              b.pnr IS NULL

                          Kommentar


                          • #14
                            RaynAnderson
                            Frage: Hast du so etwas

                            Code:
                            SELECT
                                IDE_IDEAOWNER AS PNUM
                            FROM
                                TABLEA
                            UNION
                            SELECT
                                SU_PERSNUM AS PNUM
                            FROM
                                TABLEB;
                            wie mehrfach vorgeschlagen schon probiert?

                            Kommentar

                            Lädt...
                            X