2014-11-14 76 views
0

結合我有三個表:條件不同的表之間的連接到不同的列

  1. products_taxons
  2. 分類羣
  3. 標籤

我想加入該表以獲得在列結果滿足:

  • 如果tags.tag_name =「type」和tags.value =「Silver」,那麼它應該包含兩個條目 - taxons.name和concat(tags.value,taxon.name) 例如。

    products_taxons#1,1
    分類羣#1, 「耳環」 ...
    標籤#1,1, 「型」, 「銀」

    所獲得的柱應包含 「耳環」 和「 SilverEarrings」

  • 如果tags.tag_name = 「類型」 和tags.value = 「寶貝」,那麼它應該包含一項內容 - CONCAT(tags.value,taxon.name)

    products_taxons#2,1
    taxons#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 
+0

@Jens:我已經更新了這個問題 – nish

回答

0

我認爲這是你在找什麼:

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 
相關問題