jom: 2 tabell zusammenfassen

hallo,

Ich habe 2 tabellen die die gleiche struktur haben nur die anzahl der reihen ist verschieden.

Wie kann ich die beiden mit einem SELECT zusammenfassen.

hier ein SELECT für eine Tabelle(name=art)

SELECT id,Artikelnummer,$Bez1,ENBez1,$LangT,ENLangT,VKPreis,Artikelgruppe,filterFROMart`
WHERE Artikelgruppe = '$_REQUEST[cat]'
ORDER BY id
";

die andere tabelle heisst art_add

danke

  1. Hallo jom

    Ich habe 2 tabellen die die gleiche struktur haben nur die anzahl der reihen ist verschieden.

    Du solltest untersuchen, ob Du die zweite Tabelle überhaupt benötigst.

    hier ein SELECT für eine Tabelle(name=art)

    SELECT id,Artikelnummer,$Bez1,ENBez1,$LangT,ENLangT,VKPreis,Artikelgruppe,filterFROMart`
    WHERE Artikelgruppe = '$_REQUEST[cat]'
    ORDER BY id
    ";

    die andere tabelle heisst art_add

    Dafür ist im Sprachumfang von SQL UNION vorgesehen. Ob Dein Datenbankmanagementsystem (DBMS) die UNION-Syntax unterstützt, kann ich Dir nicht sagen, weil Du uns Dein DBMS nicht verraten hast. MySQL z.B. unterstützt die UNION-Syntax erst seit Version 4.0.0, siehe MySQL-Handbuch, Abschnitt UNION-Syntax. In MS-Access war UNION definitiv schon in Access 2.0 unterstützt (Access 1.0 hab' ich nie zu sehen bekommen. MS-SQL-Server unterstützt UNION, ...

    Freundliche Grüße

    Vinzenz

    1. yo,

      Dafür ist im Sprachumfang von SQL UNION vorgesehen.

      UNION könnte eventuell zu problemen führen, da er eine unterschiedliche anzahl von datensätze in beiden tabellen besitzt und sich eventuell auch die ID's verschieben könnten. das kommt darauf an, ob er in beiden tabellen die ID's über ein autoincrement laufen läßt oder aber die zweite tabelle die ID's übernommen hat. wer hilfreich das zu wissen...

      Ilja

      1. Hallo Ilja

        Dafür ist im Sprachumfang von SQL UNION vorgesehen.

        UNION könnte eventuell zu problemen führen, da er eine unterschiedliche anzahl von datensätze in beiden tabellen besitzt und sich eventuell auch die ID's verschieben könnten.

        Aber doch nicht im SELECT-Statement. Selbstverständlich muss der OP davon ausgehen, dass die IDs nicht mehr eindeutig sein.

        das kommt darauf an, ob er in beiden tabellen die ID's über ein autoincrement laufen läßt oder aber die zweite tabelle die ID's übernommen hat. wer hilfreich das zu wissen...

        Ich hab' solche Fälle so gelöst, dass ich eine weitere Spalte in mein Statement mit aufgenommen habe in der Art

        SELECT 'A' AS TABELLE,
           /* weitere Felder */

        FROM tab1
        UNION
        SELECT 'B',
           /* weitere Felder */
        FROM tab2

        Somit hätte man über die Kombination von ID und Tabellen-Bezeichner die Eindeutigkeit sichergestellt.

        Freundliche Grüße

        Vinzenz

        1. yo,

          Aber doch nicht im SELECT-Statement. Selbstverständlich muss der OP davon ausgehen, dass die IDs nicht mehr eindeutig sein.

          es geht mir weniger um die eindeutigkeit der datensätze. ich habe vielleicht das zusammenführen der unterschiedlichen anzahl von datensätzen überinterpretiert. Union wird doppelte datensätze rausschmeissen und die frage ist, was genau er mit zusammenführen meint.

          Somit hätte man über die Kombination von ID und Tabellen-Bezeichner die Eindeutigkeit sichergestellt.

          das geht nicht in allen fällen. das war ja meine frage, wenn beide tabellen einen autoincrement besitzen und es eine unterschiedliche anzahl gibt, dann können "gleiche" datensätze unterschiedliche ID's haben und das könnte zu problemen führen, je nachdem was er machen will.

          Ilja

  2. Hello,

    SELECT id,Artikelnummer,$Bez1,ENBez1,$LangT,ENLangT,VKPreis,Artikelgruppe,filterFROMart`
    WHERE Artikelgruppe = '$_REQUEST[cat]'
    ORDER BY id
    ";

    die andere tabelle heisst art_add

    Willst Du beide Tabellen dauerhaft zu einer zusammmenfassen?
    Dann gehen Dir aber die IDs der zweiten Tabelle ggf. verloren.

    probier mal:

    insert into art select * from art_add;

    Je nachdem, ob es einen einheitlichen Primärschlüssel gibt oder nicht, würden die Datensätze aus art_add hinzugefügt. Wenn art_add.id in art.id bereits vorhanden wäre, und auf art.id ein Primärschlüssel (oder unique Index) gesetzt wäre, dann würde der betroffene Datensatz NICHT hinzugefügt.

    Wenn die IDs aus art_add nicht relevant sind, kannst du auch

    insert into art Artikelnummer, Bez1, ENBez1, ....
      select Artikelnummer, Bez1, ENBez1, .... from art_add;

    schreiben. Dann würde die ID in art neu vergeben werden (bei einem autoincrement-Key)

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau