Mysql запрос со свойствами родителей

0

У меня три таблицы:

категории:

|Id | TopId|
| 1 | null |
| 2 | null |
| 3 |  1   |
| 4 |  1   |
| 5 |  2   |
| 6 |  3   |

так далее...

categorycultures:

|Id|CultureOf|CultureId|Name      |
|1 |    1    |    1    |Category 1|
|2 |    1    |    2    |Klasse   1|
|3 |    1    |    3    |Kategori 1|
|4 |    2    |    1    |Category 2|
|5 |    2    |    2    |Klasse   2|
|6 |    2    |    3    |Kategori 2|

CultureOf также означает: CategoryId и т.д....

культуры:

|Id|Name|Flag          |    
|1 |en  |/images/en.png|    
|2 |de  |/images/de.png|    
|3 |tr  |/images/tr.png|

и этот sql-скрипт получает то, что мне нужно, но без нулевых вершин.

select c.Id as Id, cp.Id as TopId, cc.Name as Name, ccp.Name as TopName,    cul.Id as CultureId, cul.Name as CultureName

from categories as c

inner join categories as cp on c.TopId = cp.Id 

inner join categorycultures as cc on cc.CultureOf = c.Id

inner join categorycultures as ccp on ccp.CultureOf = cp.Id

inner join cultures as cul on cul.Id = cc.CultureId and cul.Id = ccp.CultureId

where cul.Id = 2

результаты:

Изображение 174551

есть недостающие строки, которые имеют значения TopId равны нулю

Я пробовал много случаев, когда серия на внутреннем соединении для cp и пробовала много скриптов, но я не могу получить правильные значения.

Теги:
select

2 ответа

0
Лучший ответ

Это сработало. но я ничего не узнал. Я скопирую и вставлю в следующий раз, когда мне это понадобится.

select c.Id as Id, c.TopId as TopId, cc.Name as Name, CASE
WHEN c.TopId is null THEN "none" 
ELSE ccp.Name
END as TopName, cul.Id as CultureId, cul.Name as CultureName

from categories as c

left join categories as cp on CASE
    WHEN c.TopId is null THEN "null" 
    ELSE c.TopId = cp.Id
END

inner join categorycultures as cc on cc.CultureOf = c.Id

left join categorycultures as ccp on ccp.CultureOf = cp.Id

left outer join cultures as cul on cul.Id = cc.CultureId and CASE
    WHEN c.TopId is null THEN 1 
    ELSE cul.Id = ccp.CultureId 
END

where cul.Id = 1
0

попробуй это

RIGHT объединяет культуры как cul

  • 0
    нет ничего не изменилось

Ещё вопросы

Сообщество Overcoder
Наверх
Меню