Gast
2007-05-14, 23:32:01
Tabelle 'category_values a', über ein WHERE statement gilt cv_cat_id IN(107, 106) und cv_detail_id = 56
cv_id | cv_cat_id | cv_detail_id
---------------------------
1 | 107 | 56
2 | 106 | 56
3 | 1 | 57
4 | 2 | 58
Tabelle 'categories b' wird auf b.c_id = a.cv_cat_id angejoint.
c_id | c_name
-------------
107 | Nok
12 | Sie
Tabelle 'categories c' wird auf c.c_id = 110 angejoint (die Nummer ist bekannt bei Ausführung).
c_id | c_name | c_detail_id
-------------
110 | Her | 12
Tabelle 'category_values d' wird über d.cv_cat_id = c.c_id und d.cv_detail_id = c.c_detail_id angejoint
cv_id | cv_cat_id | cv_detail_id
---------------------------
7 | 110 | 12
8 | 110 | 12
9 | 2 | 57
Tabelle 'language e' soll über e.l_key = CONCAT('vc_',d.cv_id) und e.l_lang = 8 angejoint werden (Nummer ist da bekannt).
l_key | l_string | l_lang
---------------------------
cv_7 | ABC | 8
cv_8 | DEF | 27
cv_9 | G | 8
Ich will als Ergebnis
b.c_id | b.c_name | c.c_id | d.cv_id | e.l_key | e.l_string
-------|----------|--------|--------|--------|----------
107 | Nok | 110 | 7 | cv_7 | ABC
Das Problem ist jetzt, dass in Tabelle d zwei Datensätze mit cv_cat_id = 110 und cv_detail_id = 12 vorkommen, Ergebnis eines LEFT JOIN ist hier dann NULL.
Mein Versuch:
SELECT a. * , b. * , c. * , d. * , e. *
FROM category_values a
LEFT JOIN categories b ON ( b.c_id = a.cv_cat_id)
LEFT JOIN categories c ON ( c.c_id =110 )
LEFT JOIN category_values d ON ( d.cv_cat_id = c.c_id
AND d.cv_detail = c.c_detail_id )
LEFT JOIN language e ON ( e.l_key = CONCAT( 'cv_', d.cv_id AND e.l_lang =8) )
WHERE a.cv_cat_id
IN ( 107, 106 )
AND a.cv_detail_id = 56
cv_id | cv_cat_id | cv_detail_id
---------------------------
1 | 107 | 56
2 | 106 | 56
3 | 1 | 57
4 | 2 | 58
Tabelle 'categories b' wird auf b.c_id = a.cv_cat_id angejoint.
c_id | c_name
-------------
107 | Nok
12 | Sie
Tabelle 'categories c' wird auf c.c_id = 110 angejoint (die Nummer ist bekannt bei Ausführung).
c_id | c_name | c_detail_id
-------------
110 | Her | 12
Tabelle 'category_values d' wird über d.cv_cat_id = c.c_id und d.cv_detail_id = c.c_detail_id angejoint
cv_id | cv_cat_id | cv_detail_id
---------------------------
7 | 110 | 12
8 | 110 | 12
9 | 2 | 57
Tabelle 'language e' soll über e.l_key = CONCAT('vc_',d.cv_id) und e.l_lang = 8 angejoint werden (Nummer ist da bekannt).
l_key | l_string | l_lang
---------------------------
cv_7 | ABC | 8
cv_8 | DEF | 27
cv_9 | G | 8
Ich will als Ergebnis
b.c_id | b.c_name | c.c_id | d.cv_id | e.l_key | e.l_string
-------|----------|--------|--------|--------|----------
107 | Nok | 110 | 7 | cv_7 | ABC
Das Problem ist jetzt, dass in Tabelle d zwei Datensätze mit cv_cat_id = 110 und cv_detail_id = 12 vorkommen, Ergebnis eines LEFT JOIN ist hier dann NULL.
Mein Versuch:
SELECT a. * , b. * , c. * , d. * , e. *
FROM category_values a
LEFT JOIN categories b ON ( b.c_id = a.cv_cat_id)
LEFT JOIN categories c ON ( c.c_id =110 )
LEFT JOIN category_values d ON ( d.cv_cat_id = c.c_id
AND d.cv_detail = c.c_detail_id )
LEFT JOIN language e ON ( e.l_key = CONCAT( 'cv_', d.cv_id AND e.l_lang =8) )
WHERE a.cv_cat_id
IN ( 107, 106 )
AND a.cv_detail_id = 56