MySQL if Unterscheidung in where Klausel

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich habe hier eine Tabelle "punkte", die so aufgebaut ist:

textid / ptext / gruppe / kdnr

Der Wert im Feld gruppe kann aber auf zwei verschiedene Tabellen verweisen, je nachdem ob der Wert größer oder kleiner als 1000 ist. Ich muß jetzt alle Werte aus Punkte und die passenden Werte aus den beiden möglichen Gruppen-Tabellen in Abhängigkeit von der kdnr auslesen. If ist ja zwar prinzipiell möglich, aber ich habe absolut keine Idee, wie sich das hier einbauen ließe. Oder muß das in mehrere Abfragen aufgeteilt werden?
 
Lösung
Nachtrag: Ich glaube, ich verstehe.
Mit einem UNION sollte das gehen

SQL:
select
    p.*, t.id, t.value
from
    punkte as p
    left join table1 as t on p.kdnr = t.kdnr
where
    p.gruppe < 1000
union all
select
    p.*, t.id, t.value
from
    punkte as p
    left join table2 as t on p.kdnr = t.kdnr
where
    p.gruppe >= 1000
aber ich habe absolut keine Idee, wie sich das hier einbauen ließe
Ich auch nicht. Aber aus einem anderen Grund als du:
Du beschreibst deine Tabelle "punkte". Im Text sprichst du von einem Wert. In welchem der Felder?
Im Text kommt auch irgendwelche nicht weiter bekannte Tabellen vor die irgendwie miteingebaut werden sollen. Schön - wie sehen diese aus?

Mach mir bitte ein Datenbeispiel mit Tabellen. So in der Art:
Das hab ich:
Code:
Tabelle mitarbeiter
id | firma_id | name
--------------------
1  | 1        | MA1
2  | 1        | MA2
3  | 2        | MA3

Tabelle Firma
id | name
---------------------
1  | firma1
2  | firma2

Nun will ich wissen, welche Firma wieviele Mitarbeiter hat. Das soll dann so aussehen
Code:
firma_id | firma_name | anzahl_mitarbeiter
------------------------------------------
1        | firma1     | 2
2        | firma3     | 1
 
Nachtrag: Ich glaube, ich verstehe.
Mit einem UNION sollte das gehen

SQL:
select
    p.*, t.id, t.value
from
    punkte as p
    left join table1 as t on p.kdnr = t.kdnr
where
    p.gruppe < 1000
union all
select
    p.*, t.id, t.value
from
    punkte as p
    left join table2 as t on p.kdnr = t.kdnr
where
    p.gruppe >= 1000
 
Lösung
Zurück