我认为这concat_ws()
可能会甩掉你想做的事情。
以下生成两个标签,即使没有值:
Select J.id,
Concat(J.Description,
'<br><br>',
'<b>Color</b>:<br>',
coalesce(group_concat(F.Name SEPARATOR '<br>'), ''),
'<br>',
'<b>Fruit</b>:<br>',
coalesce(group_concat(F2.Name SEPARATOR '<br>'), '')
)
from Main J Left Join
LUT_1 L
On J.ID = L.MainID Left Join
LUT_Names_1 F
On F.ID = L.LUT_NAME_ID Left Join
LUT_2 L2
On J.ID = L2.MainID Left Join
LUT_Names_2 F2
On F2.ID = L2.LUT_NAME_ID
Group by J.ID, J.Description;
这是一个 SQL 小提琴。
此外,如果您有多种水果或颜色,您将得到重复。因此,您需要distinct
关键字(或沿每个维度进行预聚合)。所以工作的 SQL 更像是这样的:
Select J.id,
Concat(J.Description,
'<br><br>',
'<b>Color</b>:<br>',
coalesce(group_concat(distinct F.Name SEPARATOR '<br>'), ''),
'<br>',
'<b>Fruit</b>:<br>',
coalesce(group_concat(distinct F2.Name SEPARATOR '<br>'), '')
)
from Main J Left Join
LUT_1 L
On J.ID = L.MainID Left Join
LUT_Names_1 F
On F.ID = L.LUT_NAME_ID Left Join
LUT_2 L2
On J.ID = L2.MainID Left Join
LUT_Names_2 F2
On F2.ID = L2.LUT_NAME_ID
Group by J.ID, J.Description
这是一个说明这一点的 SQL Fiddle。只需删除distinct
并查看结果的差异。