Zugehörige Datensätze finden...

Jack123

Neuer Benutzer
Beiträge
4
Hallo,
Ich stehe mal wieder vor einem Problem:
Drei Tabellen:

Tabelle [groups]:
Code:
id - Name    - weitere infos - ...
1  - Gruppe 1 - ... - ...
2  - Gruppe 2 - ... - ...
3  - Gruppe 3 - ... - ...

Tabelle [templates]
Code:
id - id_groups - id_team
1  -    1      -  100
2  -    1      -  200
3  -    2      -  100
4  -    3      -  200

Tabelle [templates]
Code:
id  - Name
...
100 - Team 100
...
200 - Team 200
...

Aufgabenstellung ist hier, eine Abfrage zu finden, die mir folgendes ausgibt:

Für id_team = 100:
Code:
id_Gruppe - selected
  1      -    1
  2      -    1
  3      -    0

Für id_team = 200:
Code:
id_Gruppe - selected
  1      -    1
  2      -    0
  3      -    1

Es sollen also, für alle Einträge in [groups] geprüft werden, ob es in [templates] einen zugehörigen Datensatz gibt, wenn ja: dann soll in selected eine "1", sonst eine "0". Ein Datensatz existiert, wenn id_team = 100 bzw. 200 (über WHERE vermutlich...) und id_groups = id vom aktuellen Datensatz aus [groups] in einem oder mehreren Datensätzen vorhanden ist.

selected = 0 bzw 1 ist nicht fest, es könnte auch 0 bzw >0 oder irgendwas anderes unterscheidbares sein.

Ich hoffe ich habe es verständlich erklärt.

Vielen Dank für die Hilfe!

mfg Florian
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.409
Zunächst mal hast du oben zwei Tabellen gleichen Namens beschrieben, ich nenne die erste einfach mal z_templates da es sich ja offensichtlich um eine reine Zwischentabelle zwischen templates und groups handelt. Dann könnte das ganze so aussehen:
Code:
SELECT    g.*
        (    CASE
            WHEN    z.id_team = 100
            AND        t.Name IS NOT NULL
            THEN    1
            ELSE    0
            END ) AS selected
FROM    groups g
LEFT JOIN z_templates z ON z.id_groups = g.id
LEFT JOIN templates t ON t.id = z.id
Jetzt bin ich mir aber nicht sicher ob es überhaupt notwendig ist die Tabelle templates noch zu joinen und auf t.Name IS NOT NULL zu prüfen. Eigentlich müsste die Tatsache, das ein Eintrag in z.templates mit der id_team = 100 existiert schon beweisen, das auch ein Template vorhanden ist. Das kann ich aber nicht so gut beurteilen :)
 
Werbung:

Tommi

Datenbank-Guru
Beiträge
284
Hi,

ich steh ja so absolut auf's Allgemeine. Ich hätte das wohl so gelöst:

Code:
SELECT G.id as Gruppe_ID,
G.Name as Gruppenname,
T.id as Team_ID,
T.Name as Team,
(CASE WHEN Z.id IS NOT NULL THEN 1 ELSE 0 END) as Selected
FROM groups G
CROSS JOIN teams T
LEFT OUTER JOIN templates Z
     ON G.id=Z.id_groups
     AND T.id=Z.id_team
WHERE T.id=100

Das Select verbindet alle Teams mit allen Gruppen und prüft die Zugehörigkeit in templates.
Daraus kann man z.B. eine View machen (dann ohne WHERE-Klausel) und diese dann entsprechend der Team- oder auch Gruppen-Einschränkung mittels WHERE abfragen.

Viele Grüße,
Tommi
 
Oben