Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 不同表之间的条件联接以合并不同的列_Mysql_Sql - Fatal编程技术网

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的单个条目
    我已经编写了以下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
    

    @詹斯:我已经更新了这个问题