Peter: Datensätze mehrerer Tabellen zählen

Tachauch,

Folgende Situation (mysql 4.0.18):

Mit
SELECT count(*) FROM tabelle1 WHERE user=17
SELECT count(*) FROM tabelle2 WHERE user=17
SELECT count(*) FROM tabelle3 WHERE user=17
bekomme ich heraus, wieviele Einträge es für user 17 in den verschiedenen Tabellen gibt.

Jetzt wollte ich das zu einem einzigen Select zusammenfassen.

SELECT count(t1.id), count(t2.id), count(t3.id) FROM tabelle1 AS t1, tabelle2 AS t2, tabelle3 AS t3 WHERE t1.user=17 OR t2.user=17 OR t3.user=17

Dabei bekomme ich aber (vermutlich, habs nicht nachgerechnet, aber die Größenordnung könnte hinkommen) 3mal das Produkt der 3 Anzahlen, nicht die 3 Anzahlen. Nützt mir also nichts - denn wenn überhaupt, dann sind die 3 Anzahlen nur zufällig Primzahlen (und auch dann bliebe noch das Problem, welcher der Primfaktoren zu welcher Tabelle gehört.

Ist es überhaupt möglich, unabhängige Daten mehrerer Tabellen mit einer Abfrage zu erhalten?
Oder muß ich doch bei den Einzelabfragen bleiben?

Bis denne,
Peter

  1. Hallo Peter,

    du baust hier ein Kreuzprodukt aus allen 3 Tabellen, also z.B.

    Tabelle 1
    Name     user
    meier    17
    mueller  20

    Tabelle 2
    Beruf    user
    Wirt     25
    Kellner  17
    Winzer   15

    Tabelle 3
    Ort     user
    Hamburg 17
    München 15

    Ergebnistabelle

    Name tabelle1.user Beruf tabelle2.user ort tabelle3.user
    meier 17            wirt    25         Hamburg     17
    meier 17            wirt    25         München     15
    meier 17            kellner 17         Hamburg     17
    meier 17            kellner 17         München     15
    meier 17            winzer  15         Hamburg     17
    meier 17            winzer  15         München     15
    mueller 20          wirt    25         Hamburg     17
    mueller 20          wirt    25         München     15
    mueller 20          kellner 17         Hamburg     17
    mueller 20          kellner 17         München     15
    mueller 20          winzer  15         Hamburg     17
    mueller 20          winzer  15         München     15

    Wenn du darauf deine Bedingungen und count anwendest, kommt so ein Ergebnis, wie du es beschreibst.

    Gruß Mia

  2. echo $begrüßung;

    Ist es überhaupt möglich, unabhängige Daten mehrerer Tabellen mit einer Abfrage zu erhalten?

    Du kannst diese Abfragen mit UNION verknüpfen, dann hast du schon mal nur noch eine Ergebnismenge, aber immer noch mehrere Datensätze.
    Ansonsten sehe ich da nur SubSelects und die gehen erst ab MySQL 4.1

    echo "$verabschiedung $name";

  3. yo,

    Ist es überhaupt möglich, unabhängige Daten mehrerer Tabellen mit einer Abfrage zu erhalten?

    über die eindeutige ID der einzelnen tabellen könnte das gehen, wie immer ungeprüft aud syntaktische oder semantische fehler....

    SELECT COUNT(DISTINCT t1.id), COUNT(DISTINCT t2.id), COUNT(DISTINCT t3.id)
    FROM tabelle1 AS t1, tabelle2 AS t2, tabelle3 AS t3
    WHERE t1.user = 17 AND t2.user = 17 AND t1.user = 17

    Ilja

    1. Hello,

      SELECT COUNT(DISTINCT t1.id), COUNT(DISTINCT t2.id), COUNT(DISTINCT t3.id)
      FROM tabelle1 AS t1, tabelle2 AS t2, tabelle3 AS t3
      WHERE t1.user = 17 AND t2.user = 17 AND t1.user = 17

      Bei 3.23.55-max funktioniert das nicht.

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

      Tom

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