Ankündigung

Einklappen
Keine Ankündigung bisher.

* mysql 2 tabellen / spalte minus spalte

Einklappen

Neue Werbung 2019

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

  • * mysql 2 tabellen / spalte minus spalte

    hallo ihr lieben ...

    ich habe da eine frage ...

    ich habe 2 tabellen (mit jeweils nur einer spalte)

    tab1:

    peter
    mike
    susie
    andre
    clara

    tab2:

    peter
    clara

    mit welcher operation kann ich sozusagen tab1 - tab2 rechnen, dass wie in diesem beispiel als ausgabe peter und clara entfernt werden.

    und nur noch

    mike, susie und andre ausgegeben werden ...

    ich habe zu danken

    sandra


  • #2
    Hallo,

    magst du uns zuerst erklären, wozu du das brauchst, was du vorhast und wie du zu diesem Datenbankdesign gekommen bist?
    http://hallophp.de

    Kommentar


    • #3
      mach doch ein Select mit einem inner join und in der where klausel dann "where name not in..". Sollte klappen.
      Look at This!
      Digital-Duty.DE
      Für Syntax-Fehler übernehme ich keine Haftung!

      Kommentar


      • #4
        Hallo,
        habe es nie ausprobiert, aber es sollte wohl gehen:
        SELECT name FROM tab1
        MINUS
        SELECT name FROM tab2

        Oder aber du fügst beide Tabellen mit UNION ALL zusammen, gruppierst nach "name" und filterst alle doppelten raus: HAVING COUNT(*) = 1:
        SELECT name FROM(
        SELECT name FROM tab1
        UNION ALL
        SELECT name FROM tab2
        ) AS un
        GROUP BY name
        HAVING COUNT(*) = 1

        Allerdings hast du dann "Überbleibsel", sprich wenn in tab2 noch Hans-Günther steht, wird das stehen bleiben.

        PS: Einen Primärschlüssel sollten deine Tabellen aber schon haben. Ich hab mal während meiner Studizeit bei meinem Arbeitgeber gekündigt deswegen ... das wird echt sehr unschön ohne.
        "Mein Name ist Lohse, ich kaufe hier ein."

        Kommentar


        • #5
          Mit nem Subselect geht es auch

          SELECT feld1 FROM tab1 WHERE feld1 NOT IN(SELECT feld1 FROM tab2)

          Kommentar


          • #6
            Zitat von Chriz Beitrag anzeigen
            Hallo,
            habe es nie ausprobiert, aber es sollte wohl gehen:
            SELECT name FROM tab1
            MINUS
            SELECT name FROM tab2
            Gerade ausprobiert - geht in MySQL nicht.

            Kommentar


            • #7
              Wie hpf und ich meinen geht es, hab ich selbst schon so gelöst.
              Look at This!
              Digital-Duty.DE
              Für Syntax-Fehler übernehme ich keine Haftung!

              Kommentar


              • #8
                Na gut, dann habe ich noch eine Variante

                SELECT tab1.feld1 FROM tab1
                LEFT JOIN tab2 ON tab1.feld1 = tab2.feld1
                WHERE tab2.feld1 IS NULL;

                Kommentar


                • #9
                  wow danke, das ging ja schnell ... probier es jetzt gleich aus ... danke schon mal ... ich berichte gleich

                  Kommentar


                  • #10
                    ich habe hpfs variante gewählt und diese funktionierte auf anhieb super ...
                    der Subselect hat bei mir nicht funktioniert, das kann aber auch daran liegen dass die spalten einen identischen namen haben.

                    ich danke euch ... echt super ...

                    ach wofür ich das brauche? ich habe eine lange liste mit vielen emails ... und eine andere liste mit emails die es nicht mehr gibt ... somit entfernen sich alle nicht mehr vorhandenen emails aus der ersten liste.

                    danke

                    sandra

                    Kommentar


                    • #11
                      Zitat von sandrasandra Beitrag anzeigen
                      der Subselect hat bei mir nicht funktioniert, das kann aber auch daran liegen dass die spalten einen identischen namen haben.
                      Die Spaltennamen sind egal. Und wenn du nicht eine Uralt-MySQL-Version hast, sollte das funktionieren.
                      Mich würde mal die Fehlermeldung interessieren - habe mich nämlich gefragt, ob bei dem NOT IN() bei großen Tabellen ein Längenlimit zuschlagen könnte.

                      Zitat von sandrasandra Beitrag anzeigen
                      ach wofür ich das brauche? ich habe eine lange liste mit vielen emails ... und eine andere liste mit emails die es nicht mehr gibt ... somit entfernen sich alle nicht mehr vorhandenen emails aus der ersten liste.
                      Du könntest auch ein zusätzliches Feld "is_active" in Tabelle 1 einführen, dann kann Tabelle 2 entfallen.

                      Kommentar


                      • #12
                        Zitat von hpf Beitrag anzeigen
                        Die Spaltennamen sind egal. Und wenn du nicht eine Uralt-MySQL-Version hast, sollte das funktionieren.
                        Mich würde mal die Fehlermeldung interessieren - habe mich nämlich gefragt, ob bei dem NOT IN() bei großen Tabellen ein Längenlimit zuschlagen könnte
                        Die ORACLE erlaubt bei IN() nur 3000 Werte, ob das beim Sub-SELECT auch anschlägt weiß ich nicht.
                        "Mein Name ist Lohse, ich kaufe hier ein."

                        Kommentar

                        Lädt...
                        X