SQL JOIN Anfrage

Hi,
ich bin relativ neu in Sachen Datenbanken! Sieht man an den vorherigen Beitrag!
Ich habe eine DB, die mehrere Tabellen und diese sind alle gleich aufgebaut, d.h. die Values sind gleich:
TaskCommonDim|TaskResource|TaskStart|TaskEnd|Piority
Die Anzahl ist abhängig von meinem Java Programm, das dem User, durch einem Wizard die Möglichkeit gibt eine neue Tabelle zu erstellen. Danach kann dieser ein oder mehrere Tabellen aussuchen und dies werden in einem JTable angezeigt. Die namen der Tabellen werden in einem Vector gespeichert. (Programmdetails, bla!)
Die TaskCommonDim ist in jeder Tabelle gleich!
Meine SQL Abfrage soll nun von den ausgewählten Tabellen folgendes anzeigen:
TaskCommonDim|TaskStart|TaskEnd
Ich weiß nicht wie ich solch eine Anfrage machen kann! Ich bin sehr verzweifelt!

Dazu müsstest du auf jede Tabelle einen Select * machen und dann anzeigen. Ich glaube nicht, dass es sonderlich viele Datenbanken gibt, die es erlauben, den Tabelleninhalt mehrerer, gleich aufgebauter, Tabellen “untereinander” zu selektieren (sofern ich dich jetzt richtig verstanden habe).

Warum hast du überhaupt mehrere gleich aufgebaute Tabellen? Und warum verwendest du eigentlich einen Vector? Muss der threadsafe sein?

Hi,

leider ist dies so gegeben.
Ich machs mal kurz:
-Man erstellt über ein Wizard sogenannte “Module” und für jedes “Modul” gibt es eine Tabelle
-Den Namen der “Module” bzw. Tabellen kann man in dem Wizard selber erstellen
-man sucht sich für jedes “Modul” entsprechende Eintragungen einer anderen DB aus

  • als nächstes kann man für einen “Scenario” einen odere mehrere “Module” wählen
    -danach kann man ein “Scenario” starten

-> dies alles ist gegeben und soll nicht verändert werden - mag zwar komisch sein, dass die Tabellen gleich aufgebaut sind soll aber erstmal so sein

Ich habe die Namen der “Module” bzw. Tabellen eines “Scenario” in einer ini-Datei gespeichert und dann in einem Vector eingelesen.
Nun weiß ich einfach nicht wie solch eine Anfrage aussehen soll um so etwas herauszubekommen (hatte es oben falsch gemacht):

[SQL]
TaskCommonDim|Tabelle1 |Tabelle2 |…
IDbla1 |TaskEnd-TaskStart|TaskEnd-TaskStart|…
… |… |… |…
[/SQL]

-Zeile 1 soll der Header sein! TaskEnd-TaskStart würde ich eher über getdate berechnen, da beides vom Typ datime ist sollte nur exemplarisch sein!
Würde mich auch über Beispiele freuen!!!

Du möchtest die Daten der Tabellen nebeneinander anzeigen (sorry, so ganz ist mir dein Vorhaben noch immer nicht klar)?

unschön, sollte aber funktionieren:

[SQL]SELECT DISTINCT tbl1., tbl2., tbl3.* FROM tbl1, tbl2, tbl3[/SQL]

Hi,
ich hab mal im Texteditor ein Beispiel gemacht. Gegeben ist z.B folgendes:
[SQL]tab1;
taskcommondim | taskresource | taskstart | taskend | priority
---------------±-------------±--------------------±---------------------------±---------
1 | Resource 1 | 2009-07-16 15:00:00 | 2009-07-16 19:26:17 | 5
2 | Resource 2 | 2009-07-16 12:00:00 | 2009-07-16 19:26:39 | 5
3 | Resource 3 | 2009-07-14 12:00:00 | 2009-07-14 16:12:00 | 5

tab2;
taskcommondim | taskresource | taskstart | taskend | priority
---------------±-------------±--------------------±---------------------------±---------
1 | Resource 5 | 2009-07-12 11:00:00 | 2009-07-16 19:28:22 | 5
2 | Resource 6 | 2009-07-12 17:00:00 | 2009-07-15 01:19:00 | 5
3 | Resource 7 | 2009-07-12 15:00:00 | 2009-07-13 03:34:00 | 5

tab3;
taskcommondim | taskresource | taskstart | taskend | priority
---------------±-------------±--------------------±---------------------------±---------
1 | Resource 8 | 2009-07-14 11:00:00 | 2009-07-16 19:28:22 | 5
2 | Resource 9 | 2009-07-14 17:00:00 | 2009-07-15 01:19:00 | 5
3 | Resource 10 | 2009-07-12 16:00:00 | 2009-07-13 03:34:00 | 5[/SQL]

Und nach der Anfrage soll folgendes heraus kommen:
[SQL] taskcommondim | dauer1 | dauer2 | dauer3
---------------±----------------±-----------------------±--------
1 | 04:26:17.85068 | 4 days 08:28:22 | bla
2 | 07:26:39.672631 | 2 days 08:19:00 | bla
3 | 04:12:00 | 12:34:00 | bla[/SQL]

übrigends den Header würde ich selber in Java anzeigen, da dor nur:
taskCommonID | tab1 |tab2|… (immer der Tabellennamen)
stehen soll!

Du willst praktisch als Ergebnis folgendes:

N Tabellen (tab1, tab2, tab3), die als taskcommondim die selbe Nummer haben zusammenjoinen, so dass du am Ende N+1 Spalten hast, wobei die erste Spalte die taskcommondim beinhaltet, und jede weitere die Differenz zwischen taskstart und taskend eines tabs!?

Genau das möchte ich haben!

In etwa so (Pseudo-Abfrage)

[SQL]SELECT tab1.id, tab1.start, tab1.end, tab2.start, tab2.end, tab3.start, tab3.end
FROM tab1
INNER JOIN tab2 ON tab1.id=tab2.id
INNER JOIN tab3 ON tab1.id=tab3.id[/SQL]

Hi, die Anfrage funzt (zumindest direkt über mySQL)!
Ich versuch dies natürlich in Java auszuführen und ich hab nun Probleme die Daten aus meinem Resultset auszulesen:

        Object[][] list = null; 
        int listSize = 0;
        Date date;
        Date date2;
        String query = null;
        try {
            Class.forName(driver);
            con = (Connection) DriverManager.getConnection(url + db  , user, pass);
            stmt = (Statement) con.createStatement();

            query = "SELECT " +  this.createSelectString() + " " +
                    "FROM " + this.createFromString() + " " + 
                    this.createWhereString() + " " +
                    "GROUP BY " + this.createGroupString() + " " 
                    ; 

            res = (ResultSet) stmt.executeQuery( query );
            while (res.next()) {
                listSize++;
            }
            res.first();
            int i = 0;
            iif (listSize > 0) {
                list = new Object[listSize]**;
                for (int j = 0; j < listSize; j++) {
                    list[j][0] = res.getString("TaskCommonDim");
                    for (i = 1; i < managerAlg.getChoosedMod().length*2; i++) {
                    date = res.getTime("TaskStart");
                    date2 = res.getTime("TaskEnd");
                    list[j]** = (date2.getTime() - date.getTime())/60000;

                    }
                    res.next();
                }
            }
            con.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        System.out.println(list);    
        return list;
    }```
Ich bekomme in der Zeile 
```list[j]** = res.getString("TaskCommonDim");```
die Exception: 

> java.sql.SQLException: Column 'TaskCommonDim' not found.

Die Anfrage wird dynamisch erstellt, da die Tabbellennamen erst vom User erstelt werden. In "managerAlg.getChoosedMod()" werden alle Tabbellennamen gespeichert!
Wie kann ich es mir in der Form 
[SQL]   
       taskcommondim |     dauer1      |         dauer2         | dauer3
---------------+-----------------+------------------------+---------
             1 | 04:26:17.85068  | 4 days 08:28:22        | bla
             2 | 07:26:39.672631 | 2 days 08:19:00        | bla
             3 | 04:12:00        | 12:34:00               | bla[/SQL]
erhalten?

Indem du die Spaltennamen angibst, anstelle eines SELECT *.

BTW: Warum läufst du das ResultSet zweimal durch? Verwende doch eine Liste oder ähnliches, wenn du nicht weißt, wie viele Datensätze zurückkommen und du das Ergebnis nicht direkt verarbeiten kannst.

Hi,
danke nochmals! Hatte mein Array list falsch deklariert! Klappt jetzt!