2013-04-09 66 views
0

我尝试之前导出为CSV格式,但即时通讯未能获得正确的数据来生成数据之前生成的数据。SQL JOIN语句 - 出口

Table : products 
products_id | products_image 
    2  | a.jpg 
    1786  | b.jpg 

Table : product_description 
products_id | products_description | language_id 
    2  | BM description  |  6 
    1786  | BM description  |  6 
    1786  | CN description  |  4 
    1786  | EN description  |  1 

我试图让输出是这样的:

products_id | products_image | p_description_6 | p_description_4 | p_description_1 | 
    2  |  a.jpg  | BM description |     |     | 
    1786 |  b.jpg  | BM description | CN description | EN description | 

我当前的查询之下,但此查询未能产生在同一行PRODUCT_DESCRIPTION:

$select = "SELECT p.*, pd.* FROM products p LEFT JOIN product_description pd on p.products_id=pd.products_id group by p.products_id"; 
+0

可能不同'language_id'固定或可变的数量? – 2013-04-09 03:02:34

+0

language_id固定.. – rusly 2013-04-09 03:04:37

回答

1

尝试类似,

SELECT 
    P.products_id, 
    p.products_image, 
    MAX(CASE WHEN language_id = 6 THEN products_description END) AS p_description_6, 
    MAX(CASE WHEN language_id = 4 THEN products_description END) AS p_description_4, 
    MAX(CASE WHEN language_id = 1 THEN products_description END) AS p_description_1 

FROM 
    products P 

INNER JOIN 
    product_description D ON P.products_id = D.products_id 

GROUP BY 
    P.products_id, 
    p.products_image 

SQL Fiddle

+0

如何在同一行中回显3个product_description? – rusly 2013-04-09 03:12:24

+0

@rusly我刚刚创建了一个SQL小提琴,请检查... – Nalaka526 2013-04-09 03:22:16

+0

感谢它的工作...输出是真棒:D – rusly 2013-04-09 03:44:10

0

可以使用GROUP_CONCAT产生在同一行PRODUCT_DESCRIPTION:

select 
    a.products_id, 
    a.products_image, 
    group_concat(b.products_description) as descriptions, 
    group_concat(b.language_id) as lang_ids 
from products a 
left join 
    product_description b on b.products_id = a.products_id 
group by a.products_id 

SQL Fiddle Demo