Mysql 不同表之间的条件联接以合并不同的列
我有三张桌子:Mysql 不同表之间的条件联接以合并不同的列,mysql,sql,Mysql,Sql,我有三张桌子: 产品分类 分类单元 标签 我想加入表以在结果中获得一列,以满足: 如果tags.tag_name=“type”和tags.value=“Silver”,那么它应该包含两个条目-taxon.name和concat(tags.value,taxon.name) 例如 产品分类#1,1 分类1,“耳环”… 标签#1、1、“类型”、“银色” 结果列应包含“耳环”和“银耳环” 如果tags.tag_name=“type”和tags.value=“Precious”,那么它应该包含一个条目
- 如果tags.tag_name=“type”和tags.value=“Silver”,那么它应该包含两个条目-taxon.name和concat(tags.value,taxon.name)
例如
产品分类#1,1
分类1,“耳环”…
标签#1、1、“类型”、“银色” 结果列应包含“耳环”和“银耳环” - 如果tags.tag_name=“type”和tags.value=“Precious”,那么它应该包含一个条目-concat(tags.value,taxon.name)
产品分类#2,1
分类1,“耳环”…
标签#2,2,“类型”,“珍贵” 结果列应包含“PreciousEarrings” - 所有其他情况-带有taxons.name的单个条目
select pt.product_id as product_id, concat(tag.value,t.name) as taxon
from taxons as t
inner join products_taxons as pt on t.id = pt.taxon_id
left join tags as tag
on tag.taggable_id = pt.product_id and (tag.value='Precious' or tag.value='Silver')
UNION ALL ( select pt.product_id as product_id, t.name as taxon
from taxons as t
inner join products_taxons as pt on t.id = pt.taxon_id
left join tags as tag
on tag.taggable_id = pt.product_id
where tag.value='Silver' )
<强>编辑:示例,考虑以下表项
product_id | taxon_id
------------+-----------
1000000001 | 1
1000000002 | 2
1000000003 | 3
id | name
-----------+---------------
1 | Necklace Sets
2 | Earrings
3 | Bracelets
product_id | tag_name | value
------------+-----------------------+--------------------------------------------
1000000001 | type | Silver
1000000002 | type | Precious
1000000003 | occasion | Everyday Wear
我想要下面的结果
product_id | taxon
------------+-----------
1000000001 | Necklace Sets
1000000001 | SilverNecklace Sets
1000000002 | PreciousEarrings
1000000003 | Bracelets
我想这就是你想要的:
select pt.product_id as product_id,
case tag.value when "Silver" then concat(tag.value,t.name)
when "Precious" then concat(tag.value,t.name)
else t.name
end as taxon
from taxons as t
inner join products_taxons as pt on t.id = pt.taxon_id
left join tags as tag
on tag.product_id = pt.product_id
@詹斯:我已经更新了这个问题