MYSQL Abfrage in 2 Tabellen gleichzeitig

MbHelm

Mitglied
Hallo, ich stehe schon seit Stunden vor einem Problem und finde keine Lösung.
Vielleicht steh ich schon kurz davor, aber ich bekomm's einfach nicht hin:


Ich habe in meine MySQL-Datenbank 2 Tabellen (eigentlich mehr, aber der Abstraktion wegen 2):

Code:
Tabelle 1 (T1):                      Tabelle 2 (T2):

Kunde | Wert                        Kunde | Wert
---------------                     -------------
  K1  |  4                            K4  |  7
  K2  |  6                            K1  |  10
  K3  |  9                            K3  |  9
  K1  |  7                            K2  |  8
  K3  |  8


Das Ziel soll es sein, mit einer Abfrage nur die Kunden zu finden, deren größter Wert kleiner als 9 ist.
Das Ergebnis darf, wenn ich mir die Tabellen so anschaue, nur die Kunden K2 und K4 enthalten.
Und dann stellt sich die Frage, wie die Abfrage aussehen muss, wenn ich nun 3 Tabellen (und mehr) von der Art habe.

So richtig komme ich aber nicht weiter. Meine jetzige Abfrage sieht so aus:
(Führt aber auch nicht zum Ergebnis. )

PHP:
SELECT * 
FROM 
( 
  SELECT * FROM 
  (
    SELECT kunde, MAX( wert ) AS datum
    FROM b1
    GROUP BY kunde 
  )   
  AS hilfstab1,
  (
    SELECT kunde, MAX( wert ) AS datum
    FROM b2
    GROUP BY kunde 
  ) 
  AS hilfstab2 
  WHERE hilfstab1.datum < 9 AND hilfstab2.datum < 9 
) 
AS hilfstab 
#WHERE hilfstab.datum < 9

Vielleicht könnt ihr mir auf die Sprünge helfen.
 
HI,

was Du hier machst ist etwas ungewöhnlich, mal sehen ob ich es richtig verstanden habe:

Du möchtest aus allen Tabellen die KUNDEN haben deren WERT < 9 ist, unabhängig davon ob der KUNDE in ALLEN Tabellen vorkommt UND ob der KUNDE mehrere Einträge hat?

Das würde ich über ein UNION lösen, damit bekommst Du alle KUNDEN und deren WERTE < 9 unabhängig davon ob KUNDE in allen Tabellen vorkommt. Ich lasse mir noch die Tabelle mit ausgeben wo die Werte herkommen!

PHP:
    SELECT kunde, MAX( wert ) AS datum, 't_kunde' as tab
    FROM t_kunde    
    GROUP BY kunde 
    HAVING MAX(wert) < 9 

union 

    SELECT kunde, MAX( wert ) AS datum, 't_kunde_2' as tab
    FROM t_kunde_2
    GROUP BY kunde
    HAVING MAX(wert) < 9

Wenn aber nur die Kunden ausgegeben werden sollen die in ALLEN Tabellen Werte < 9 haben würde ich das so machen, dann bleibt tatsächlich nur K2 übrig da der in beiden Tabellen < 9 hatte:
PHP:
SELECT * FROM 
  (
    SELECT kunde, MAX( wert ) AS datum
    FROM t_kunde    
    GROUP BY kunde 
    HAVING MAX(wert) < 9 
  )   AS hilfstab1
 join   
  (
    SELECT kunde, MAX( wert ) AS datum
    FROM t_kunde_2
    GROUP BY kunde
    HAVING MAX(wert) < 9 
		
  ) AS hilfstab2 
  on (hilfstab1.kunde = hilfstab2.kunde )

evtl. hilft Dir das.

Grüße
 
Danke,
das ist schon mal ein neuer Ansatz, mit dem ich weiter Arbeiten kann.

Deine Vermutung ist fast richtig:
was Du hier machst ist etwas ungewöhnlich, mal sehen ob ich es richtig verstanden habe:

Du möchtest aus allen Tabellen die KUNDEN haben deren WERT < 9 ist, unabhängig davon ob der KUNDE in ALLEN Tabellen vorkommt UND ob der KUNDE mehrere Einträge hat?

Ich möchte aus allen Tabellen die KUNDEN haben, deren WERT < 9 ist.
Und die auch in keiner der jeweils anderen Tabellen einen größeren Wert haben. (Daran scheitere ich momentan noch)
Dabei ist es egal, wie oft ein Kunde in welcher Tabelle vorkommt. Mich interessiert nur die Nummer der Kunden, auf die das Zutrifft.
 
Vielen Dank für die Hilfe Planb2000,

ich habe es hinbekommen:

PHP:
SELECT kunde, vgl 
FROM 
  ( 
    SELECT kunde, MAX( datum ) as vgl
    FROM 
    (
      SELECT kunde, MAX( wert ) AS datum, 'b1' as tab
      FROM b1    
      GROUP BY kunde 

UNION 

      SELECT kunde, MAX( wert ) AS datum, 'b2' as tab
      FROM b2
      GROUP BY kunde
    ) 
    AS ergebnis1
    GROUP BY kunde
  ) 
  AS ergebnis2
WHERE vgl < 9

aber vielleicht geht es ja noch schöner :)
 
Zurück