2015-05-18 164 views
3

我想結合我的postgres查詢,在產品屬性。目前,它是給我的結果:合併兩個結果

name  id value     sku  item_count 
Item # 1 3 Item     IT-EM1 3 
Item # 1 2 006058465456   IT-EM1 3 
Item # 2 3 Item     IT-EM2 1 
Item # 2 2 055045004505   IT-EM2 1 

我想它返回如下:

name  id#1 value#1 id#2 value#2   sku  item_count 
Item # 1 3  Item  2  006058465456 IT-EM1 3 
Item # 2 3  Item  2  055045004505 IT-EM2 1 

的ID是產品屬性ID(2是GTIN和3是品牌,)的值是該特定產品屬性的價值。我的查詢如下:

SELECT 
    p.name, 
    l.property_id AS id, 
    l.value AS value, 
    v.sku, 
    s.count_on_hand AS item_count, 
FROM 
    spree_variants v INNER JOIN 
    spree_products p ON v.product_id = p.id LEFT OUTER JOIN 
    spree_stock_items s ON v.id = s.variant_id INNER JOIN 
    spree_product_properties l ON l.product_id = p.id 
WHERE 
    s.count_on_hand > 0 

任何想法?

+0

請提供您的Postgres版本(as * always *)。表格定義也會很有幫助 - 你在psql或有效的DDL腳本中使用'\ d tbl'獲得的內容 - 僅僅是相關的列,但有所有限制。結果中是否只有兩個不同的'id'值? –

回答

0

我自己回答了這個問題。也許不是最優雅soltuion,但:

SELECT 
    p.name, 
    l.property_id AS id, 
    l.value AS value, 
    li.property_id AS id_two, 
    li.value AS value_two, 
    v.sku, 
    s.count_on_hand AS item_count, 
FROM 
    spree_variants v INNER JOIN 
    spree_products p ON v.product_id = p.id LEFT OUTER JOIN 
    spree_stock_items s ON v.id = s.variant_id INNER JOIN 
    spree_product_properties l ON l.product_id = p.id INNER JOIN 
    spree_product_properties li ON li.product_id = p.id 
WHERE 
    s.count_on_hand > 0 AND 
    l.property_id = 2 AND 
    li.property_id = 3 

再次添加產物性質列作爲一個不同的變量(L和Li)然後在限定WHERE該l.property_id = 2和li.property_id = 3