mysql - 不同表之间的条件连接以组合不同的列

标签 mysql sql

我有三个表:

  1. 产品分类
  2. 分类单元
  3. 标签

我想连接表以获得结果中的一列以满足:

  • 如果tags.tag_name=“type”且tags.value=“Silver”,那么它应该包含两个条目 -taxons.name 和 concat(tags.value,taxon.name) 例如。

    products_taxons# 1,1
    分类群#1,“耳环”...
    标签# 1, 1, "类型", "银"

    结果列应包含“Earrings”和“SilverEarrings”

  • 如果tags.tag_name=“type”且tags.value=“Precious”,那么它应该包含一个条目 - concat(tags.value,taxon.name)

    products_taxons# 2,1
    分类群#1,“耳环”...
    标签# 2, 2, "类型", "珍贵"

    结果列应包含“PreciousEarrings”

  • 所有其他情况 - 带taxons.name的单一条目

我编写了以下 sql 查询。它有效,但有更好、最佳的方法吗?

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

关于mysql - 不同表之间的条件连接以组合不同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26924138/

相关文章:

sql - Oracle SQL PLS-00049 : bad bind variable

mysql - 如果包含 json 文档作为字符串,如何从 MySQL(5.6) 列中获取值

Mysql 查询 Union All 和 Join for League 表

php - 使用 PDO 插入多行

MySQL:连接多行并计算一个查询中的出现次数

php - Laravel Eloquent 不将模型保存到数据库

sql - 尝试为自日期 x 以来的记录创建 Rails 模型范围查询,使用 lambda?

mysql - 查询在 MYSQL 中有效,但在 MYSQLI 中无效

mysql - SQL 在一列中选择多个值,具有不同的条件

sql - 在 SQL 查询中将结果集组合到数组中