构建SQL查询以获取行形式的数据(所有产品名称排在前面一行)

时间:2016-05-06 14:57:31

标签: sql

需要构建SQL查询

我有两张桌子

tbl_cat
_________________
cat_id | cat_name
tbl_pro
__________________________
pro_id | pro_name | cat_id

现在我需要行

的数据

e.g

category name | pro name 1 | pro name 2 | pro name 3

OR

Category name | pro name 1 , pro name 2 , pro name 3

我的查询

SELECT ct.cat_name,
       cp.proname
FROM tbl_cat ct
JOIN tbl_pro cp
WHERE ct.cat_id=cp.cat_id;

它显示了这样的结果

_____________________________
cat Name | Pro Name 
cat Name | Pro Name 1 
cat Name | Pro Name 2 

3 个答案:

答案 0 :(得分:0)

$result = mysql_query"
SELECT tbl_cat.CatName, tbl_pro.ProName1, tbl_pro.ProName2, tbl_pro.ProName3
FROM tbl_cat
LEFT JOIN tbl_pro
ON tbl_cat.cat_id=tbl_pro.cat_id
";

while($row = mysql_fetch_array($result)) {
 echo "Category: " . $row[CatName] . " Product1: " . $row[ProName1] . " Product2: " . $row[ProName2] . " Product3: " . $row[ProName3];
}

答案 1 :(得分:0)

如果您使用的是sqlserver2008 R2或更高版本试试这个:

select ct.cat_name,
    STUFF(
             (SELECT DISTINCT ',' + cp.pro_name
              FROM tbl_pro cp INNER JOIN tbl_cat ci on ci.cat_id=cp.cat_id
              where ci.cat_id = ct.cat_id                 
              FOR XML PATH (''))
              , 1, 1, '')  AS ProductList
    FROM tbl_cat ct
    GROUP BY ct.cat_name,ct.cat_id

答案 2 :(得分:0)

您没有说明您的DBMS,因此这适用于Postgres:

SELECT ct.cat_name, string_agg(cp.proname, ',')
FROM tbl_cat ct
  JOIN tbl_pro cp ON ct.cat_id=cp.cat_id
GROUP BY ct.cat_name
ORDER BY ct.cat_name;