mysql: Summe über 2 Tabellen geht nicht?!?

Dieses Thema im Forum "Webserver (Software): Linux, Unix, etc." wurde erstellt von telefoni, 23. Januar 2005.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. telefoni

    telefoni New Member

    Registriert seit:
    6. Oktober 2001
    Beiträge:
    432
    Hallo,


    gegeben sind die Tabellen:

    T1 mit: id, megabytes

    und

    T2 mit: id, megabytes

    In den Tabellen sind je run 20.000 Zeilen.
    Server = 4 GB / Dual Xeon4 / SCSI...

    Mache ich diese Abfrage:

    SELECT
    sum(T1.megabytes),
    sum(T2.megabytes)
    FROM T1,T2

    Kommt einfach keine Antwort. In der
    Processlist steht nur "Sending Data".

    Einzeln (d.h. z.B. nur T1 oder nur T2) geht es
    wunderbar.

    Wieso geht es aber -wie oben geschrieben- nicht?


    Gruß und Dank!


    telefoni
     
  2. HosterME.de

    HosterME.de Eingetragener Provider

    Registriert seit:
    24. März 2004
    Beiträge:
    1.063
    Firmenname:
    HosterME.de
    Anbieterprofil:
    Klick
    Weil du so wie du das angegeben hast einen JOIN über die beiden Tabellen anlegst und da du keine JOIN Bedingung angegeben hast, werden insgesamt soviel Tupel, wie das kartesische Produkt umfasst, erzeugt, also 20.000^2 Tupel und darauf werden dann die Summenfunktionen losgelassen. Warte einfach ein paar Stunden dann bekommst du das Ergebnis.

    Nachtrag: Solltest du Oracle benutzen, kann man den Optimierer bei der Menge an RAM ggf. zu einem HEAP-JOIN oder Index JOIN überzeugen, was dann wiederrum schneller geht, aber da hilft dir die Orcale Dokumentation weiter: (Stichwort: Cost Based Optimizer).
     
    Zuletzt bearbeitet: 23. Januar 2005
  3. telefoni

    telefoni New Member

    Registriert seit:
    6. Oktober 2001
    Beiträge:
    432
    Danke für die Info!

    Das Problem in dieser Abfrage ist, dass ich
    keine Join-Bedingung nutzen kann, weil die
    Tabellen in keinerlei für mySQL eindeutigem
    Zusammenhang stehen.

    Zur Veranschaulichung des Problems:

    Ich habe 2 Tabellen mit Trafficdaten,
    die erhebliche Abweichungen enthalten.
    Da die Tabellen aus zwei total unterschiedlichen
    Quellen stammen (ich + Provider) gibt es leider
    keine eindeutige ID o.ä. die die Tabellen vergleichbar
    machen. Das einzige sind Zeitstempel, die aber
    auch Abweichungen enthalten.

    Was ich nun tun möchte ist Folgendes:

    Mache einen Select über beide Tabellen,
    der je die Summe der Megabytes gruppiert nach Tagen
    ausgibt sowie deren Differenz:


    Ich dachte da an sowas, was aber nicht geht :-(

    SELECT
    substring(T1.datetime, 1, 8) AS DATUM,
    sum(T1.megabytes) AS PROV_TRAFFIC,
    sum(T2.megabytes) AS MY_TRAFFIC,
    sum(T1.megabytes)-sum(T2.megabytes) AS DELTA
    GROUP BY substring(T1.datetime, 1, 8)

    Alleine schon der fehlende Bezug auf den Zeitstempel von T2
    lässt vermuten, dass es nicht klappt. Ich frage mich,
    ob man diese Fragestellung in mySQL formulieren kann.

    Gruß+Dank!

    telefoni
     
  4. Evil Azrael

    Evil Azrael New Member

    Registriert seit:
    1. Juni 2003
    Beiträge:
    493
    mysql hat doch bestimmt auch einen date datentyp, wenn nicht, wegschmeissen...
    mysql kann doch bestimmt subqueries im FROM abschnitt, wenn nicht, wegschmeissen ...

    SELECT
    a.datum, a.traffic as provider_traffic, b.traffic as dein_traffic,(a.traffic -b.traffic) as
    FROM
    (SELECT datetime::date as datum, sum(megabytes) as traffic FROM t1 GROUP by datetime::date) as a,
    (SELECT datetime::date as datum, sum(megabytes) as traffic FROM t2 GROUP by datetime::date) as b
    WHERE a.datum = b.datum
     
  5. impulz

    impulz New Member

    Registriert seit:
    12. November 2001
    Beiträge:
    493
    Ort:
    Paderborn
    DATE Typ gibts natuerlich. Subselects sind seit 4.1 auch drin :)

    Gruss,
    Michael
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen