# 2 Tabellen zusammenfügen wie?



## Guest (19. Apr 2008)

ich habe zwei Tabellen:

Tabelle 1:

Haus
Garten
Tier
Mensch

Tabelle 2:

10
23
44
99

So nun will ich einfach beide Tabellen zusammenfügen, so soll es dann aussehen:

Haus     10
Garten   23
Tier     44
Mensch   99

Also nicht mit einem join!!!

Vielen danke für eure Hilfe!


----------



## SlaterB (19. Apr 2008)

Tabellen haben von Natur aus keine Reihenfolge, die Darstellung ist willkürlich,

falls du doch bei beiden eine Id hast, diese aber nicht zusammenpasst, dann fällt ein Join darüber auch weg,

nein, sowas gibts nicht


----------



## robertpic71 (19. Apr 2008)

Also Standardfunktion ist das keine.....

Was für eine Datenbank verwendest du? Einzig denkbarer Weg für eine solche Anforderung ist ein counter bzw. row_number(). Da ich nicht weiß, was für eine Datenbank  du hast, kann ich mit keinen Vorschlag machen

Zusatzfrage: Ist die Reihenfolge aus den Dateien "so wie gespeichert" oder sortiert?

/Robert


----------



## Marco13 (19. Apr 2008)

Die beiden Tabellen, die du da hast, enhalten ja jeweils ein TableModel. Eine Möglichkeit wäre, die beiden Models zu kombinieren. (Ob diese Lösung für deinen Fall angebracht ist, musst du entscheiden!).

Hab' mal ein "CompundTableModel" geschrieben, dass beliebige TableModels kombiniert. Da ich gerade an einem JDK-freien Rechner sitze, ist das ganze *ungetestet* und enthält sicher noch einige Tippfehler oder Bugs, aber hoffentlich keine grundsätzlichen "Designfehler". Der Ansatz sollte auf jeden Fall klar werden: Man implementiert das TableModel-Interface, und reicht alle Methoden an das Unter-TableModel weiter, das von der jeweiligen Methode betroffen ist. 
Insbesondere beim Event-Handling müßte man nochmal drüberschauen, ob das alles passt, aber ... wenn ich wieder am Entwicklungsrechner bin, und räum' ich das ganze vielleicht noch ein bißchen auf und so...

```
import java.util.*;
import javax.swing.table.*;
import javax.swing.*;

class CompoundTableModel extends AbstractTableModel implements TableModelListener
{
    private List<TableModel> tableModels = new ArrayList<TableModel>();

    public CompoundTableModel(TableModel ... models)
    {
        if (tableModels == null)
        {
            throw IllegalArgumentException("At least one TableModel required");
        }
        for (TableModel model : models)
        {
            tableModels.add(model);
            model.addTableModelListener(this);
        }
    }

    public void tableChanged(TableModelEvent e)
    {
        int column = TableModelEvent.ALL_COLUMNS;
        int subCol = e.getColumn();
        if (subCol != TableModelEvent.ALL_COLUMNS)
        {
            column = subColToThisCol((TableModel)e.getSource(), subCol);
        }

        TableModelEvent thisEvent = new TableModelEvent(this,
            e.getFirstRow(), e.getLastRow(), column, e.getType());

        TableModelListener tableModelListeners[] = getTableModelListeners();
        for (TableModelListener : tableModelListeners)
        {
            tableModelListener.tableChanged(thisEvent);
        }
    }

    private int subColToThisCol(TableModel sub, int subCol)
    {
        int offset = 0;
        for (TableModel tableModel : tableModels)
        {
            if (tableModel == sub)
            {
                return offset + subCol;
            }
            offset += tableModel.getColumnCount();
        }
        return -1;
    }

    private TableModel modelFor(int col)
    {
        for (TableModel tableModel : tableModels)
        {
            if (col < tableModel.getColumnCount())
            {
                return tableModel;
            }
            col -= tableModel.getColumnCount();
        }
    }

    private int thisColToSubCol(int thisCol)
    {
        int col = thisCol;
        for (TableModel tableModel : tableModels)
        {
            if (col < tableModel.getColumnCount())
            {
                return col;
            }
            col -= tableModel.getColumnCount();
        }
        return -1;
    }

    public String getColumnName(int col)
    {
        TableModel tableModel = modelFor(col);
        int subCol = thisColToSubCol(col);
        return tableModel.getColumnName(subCol);
    }

    public int getRowCount()
    {
        int maxRows = 0;
        for (TableModel tableModel : tableModels)
        {
            maxRows = Math.max(maxRows, tableModel.getRowCount());
        }
        return maxRows;
    }

    public int getColumnCount()
    {
        int columns = 0;
        for (TableModel tableModel : tableModels)
        {
            columns += tableModel.getColumnCount();
        }
        return columns;
    }

    public Object getValueAt(int row, int col)
    {
        TableModel tableModel = modelFor(col);
        int subCol = thisColToSubCol(col);
        if (row >= tableModel.getRowCount())
        {
            return null;
        }
        return tableMode.getValueAt(row, subCol);
    }

    public boolean isCellEditable(int row, int col)
    {
        TableModel tableModel = modelFor(col);
        int subCol = thisColToSubCol(col);
        if (row >= tableModel.getRowCount())
        {
            return false;
        }
        return tableModel.isCellEditable(subCol, row);
    }

    public void setValueAt(Object value, int row, int col)
    {
        TableModel tableModel = modelFor(col);
        int subCol = thisColToSubCol(col);
        if (row < tableModel.getRowCount())
        {
            tableModel.setValueAt(value, row, subCol);
        }
        // Fired by tableModel and propagated by "this"
        //fireTableCellUpdated(row, col);
    }
}
```


----------



## masta // thomas (19. Apr 2008)

Marco, bist du sicher, dass es nicht evtl. um Tabellen einer Datenbank handelt?


----------



## Marco13 (20. Apr 2008)

Nein .... aber dem Forenbereich nach, KÖNNTE das _möglicherweise_ so sein....  :roll:  :?


----------



## SlaterB (20. Apr 2008)

der eindeutige Hinweis ist das Wort 'join' im ersten Post


----------



## Marco13 (20. Apr 2008)

Die zweideutigen Hinweise waren aber das Wort "aussehen" und der Kontex "Also nicht mit einem join!!! " :wink:


----------



## uxvfckp (21. Apr 2008)

nur mal so nebenbei

welchen sinn sollte es haben wenn man die daten ehh nicht eindeutig zuordnet ??


----------

