2011-11-18 111 views
0

我有以下查询:SQL Server的SELECT复合表

SELECT p.id as prod_id, * FROM products AS p 
     LEFT JOIN Product_UPC AS UPC ON UPC.ProductID = p.id 
     LEFT JOIN Brands AS b ON p.brand = b.id 
     LEFT JOIN productCategoryLink AS c ON c.ProductID = p.id 
     WHERE (p.id = '$this->prod_id') 

产品可以被分配到多个类别,因此我有一个复合表由产品和类别ID的。我想修改上面的查询,以便它只显示一行数据,因为它现在显示多个,取决于组合表中有多少类别。我想以某种方式将类别ID的行带出并添加到一行中。

例如。

id | name | desc | category1| category2| category3 | price 

这可能吗?如果是这样如何?

+0

固定数量的类别?如果是有多少? – triclosan

+0

我没有固定数量的猫,它的无限。 – LeeTee

+0

我已经在你的评论之后重发了你的问题;) – Marco

回答

1

你可以试试这个获得类别一列(您可以在以后将它们分割):

SELECT p.id as prod_id, * FROM products AS p 
     GROUP_CONCAT(c.category), 
     LEFT JOIN Product_UPC AS UPC ON UPC.ProductID = p.id 
     LEFT JOIN Brands AS b ON p.brand = b.id 
     LEFT JOIN productCategoryLink AS c ON c.ProductID = p.id 
     WHERE (p.id = '$this->prod_id') 

如果你想获得的所有产品,改变最后一排与此

GROUP BY p.id 
你有
+0

对不起,我一直是个白痴,它不是MySQL的mssql。不要认为Group_concat适用于此。 – LeeTee

+0

@LeeTee:最佳[链接](http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-ms-sql-server-2005)我找到了... – Marco

+0

谢谢,但彻底困惑:0/ – LeeTee