Knud: (Mysql) vergleich zweier Tabellen, welche sind "neu"?

Hallo!

Nachdem mir das Wochenende wiedermal nicht weitergeholfen hat,
hoffe ich, dass ich erneut die Unterstützung bei Euch finde.

Ich möchte ein Statement formulieren, dass mir alle die Sätze ausgibt, die
nur in der einen Tabelle vorhanden aber nicht in der anderen.

Normalerweise bekomme ich eine Tabelle mit aktualisierten Beständen.
Dabei sollte die Anzahl der Sätze konstant sein. Wie auch immer, plötzlich
sind in der Übergabedatei mehr Sätze als in der Hauptdatei zu finden.
Bei beinahe 5000 Sätzen fällt es mir leider sehr schwer, die Sätze, die
zuviel sind manuell herauszufinden.
Nur wie beschreibt man ein leere Schnittmenge in Mysql?

Wäre toll, wenn einer von Euch ne Lösung hätte!

Gruß,

Knud

  1. Hi,

    Ich möchte ein Statement formulieren, dass mir alle die Sätze ausgibt, die
    nur in der einen Tabelle vorhanden aber nicht in der anderen.

    keine Ahnung, ob MySQL das kann - aber sinngemäß sollte es so lauten:

    SELECT * FROM tabelle1
    MINUS
    SELECT * FROM tabelle2

    Möglicherweise mußt Du das "*" auf eine Spalte (Primary Key) reduzieren.

    Cheatah

    1. Hi,

      keine Ahnung, ob MySQL das kann - aber sinngemäß sollte es so lauten:

      SELECT * FROM tabelle1
      MINUS
      SELECT * FROM tabelle2

      Möglicherweise mußt Du das "*" auf eine Spalte (Primary Key) reduzieren.

      geht leider nicht. (wäre ja auch zu schön gewesen).
      Auch, wenn ich's nur auf den primary key reduziere.

      Ok, mit nem kleinen Script geht's auch recht schnell. Da bleibt mir wohl nichts anderes.

      Gruß,

      Knud

  2. Hallo !

    Ich befürchte, Cheatahs Vorschlag läßt sich mit MySQL nicht umsetzen.

    Vielleicht hilft dir aber ein Blick auf diesen Thread im Forums-Archiv: http://www.teamone.de/selfhtml/sfarchiv/2000_3/t19363.htm.

    Dort wurde ein ähnliches Problem behandelt.

    Gruß,

    kerki

    1. Hi,

      Ich befürchte, Cheatahs Vorschlag läßt sich mit MySQL nicht umsetzen.

      *seufz* manchmal frage ich mich wirklich, wozu MySQL überhaupt gut ist... vom reinen Auslesen bestimmter Daten, die man kennt, mal abgesehen :-(

      Angeblich soll MySQL 4 Subselects beherrschen (werden). Kann das jemand bestätigen?

      Cheatah

      1. Hallo !

        *seufz* manchmal frage ich mich wirklich, wozu MySQL überhaupt gut ist... vom reinen Auslesen bestimmter Daten, die man kennt, mal abgesehen :-(

        Alles eine Frage des eigenen Anspruchs: :-)

        MySQL über MySQL:
        "The main goals of MySQL are speed and robustness."

        Oder noch treffender:
        "Some things we don't have any plans to do: [*g*]
        Transactions with rollback (we mainly do selects, and because we don't do transactions we can be much quicker on everything else)."

        Insofern ist "reines Auslesen bestimmter Daten, die man kennt" und dies so schnell und zuverlässig wie möglich, also erstes Ziel von MySQL.

        Und hierzu ist MySQL m.E. _mehr_ als gut und dabei so unverschämt preisgünstig. :-)

        Angeblich soll MySQL 4 Subselects beherrschen (werden). Kann das jemand bestätigen?

        Scheint zu stimmen:
        http://www.mysql.com/development/todo.html

        Gruß,

        kerki

        1. Hi,

          Und hierzu ist MySQL m.E. _mehr_ als gut

          da stimme ich Dir zu - wobei ich "robustness" mal _nicht_ auf die Funktionalität beziehe, denn dann muß ich diese Aussage revidieren ;-)

          und dabei so unverschämt preisgünstig. :-)

          ACK :-)

          http://www.mysql.com/development/todo.html

          Merci!

          Cheatah

  3. Hi!

    Die mysql-Lösung ist sogar in dem Manual beschrieben:

    http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#JOIN
    "This example finds all rows " und so weiter

    --
    Henryk