[gelöst] SQL: Wert in Abhängigkeit aus Tabelle A oder Tabelle B bestimmen
-
Hallo,
ich habe zwei Tabellen:
tbl_name
- id
- alias_id
- nametbl_alias
- id
- nameWie muss die SQL Anweisung aussehen, die mir tbl_name.name zurückgibt für alle Einträge in tbl_name, in denen alias_id=0 ist und ansonsten tbl_alias.name für alle Einträge mit alias_id != 0 und tbl_name.alias_id = tbl_alias.id ?
Wenn jemand noch ne gute SQL Buchempfehlung hat fände ich das toll
-
So, diese Abfrage scheint das zu tun, was ich will
select tbl_feature1_names.name as name from tbl_feature1_names where alias_id = 0 union select tbl_aliases.name as name from tbl_aliases, tbl_feature1_names where tbl_feature1_names.alias_id = tbl_aliases.id
allerdings habe ich jetzt Probleme, diese Query als Subquery in die eigentlich Abfrage einzubauen :
select sum( tbl_defects.defect_count ), name from tbl_defects, ( select tbl_feature1_names.name AS name from tbl_feature1_names where alias_id = 0 union select tbl_aliases.name AS name from tbl_aliases, tbl_feature1_names where tbl_feature1_names.alias_id = tbl_aliases.id ) where tbl_defects.feature1_id = tbl_feature1_names.id group by feature1_id
Fehlermeldung: every derived table must have its own alias.
Ich benutze MySQL 5.0.Noch kurz die Beschreibung des Zwecks der Übung:
Eine Tabelle speichert Defektzahlen, jede Defektzahl ist die Kombination aus zwei Merkmalen. Die Merkmalsnamen sind als Fremdschlüssel in jeweils zwei weiteren Tabellen hinterlegt. Diese Merkmalsnamenstabellen ( ) haben eine id, alias_id und name. Wenn alias_id 0 ist soll der name aus der Merkmalstabelle benutzt werden, ansonsten der Name aus der alias Tabelle.
Die Abfrage soll die Summe aller Defekte eines Merkmals liefern, zusammen mit dem Merkmalsnamen bzw. dessen Alias.
-
Trial & Error sei Dank:
select sum( D.defect_count ), feat1.name as defect_name1 from tbl_defects D, ( select N.id as id, N.name as name from tbl_feature1_names N where N.alias_id = 0 union select N.id as id, A.name as name from tbl_feature1_names N, tbl_aliases A where N.alias_id = A.id ) feat1 where D.feature1_id = feat1.id group by D.feature1_id