我有 2 个表,产品和组件
CREATE TABLE Product(
ProductId uniqueidentifier DEFAULT NEWID(),
ProductName nvarchar(25) NOT NULL,
CONSTRAINT PK_Product PRIMARY KEY (ProductId))
CREATE TABLE Component
(
ComponentId uniqueidentifier DEFAULT NEWID(),
ComponentName nvarchar(25) NOT NULL,
CONSTRAINT PK_Component PRIMARY KEY (ComponentId)
)
我需要一个“多对多”的连接,所以我创建了第三个表
CREATE TABLE Product_Component(
idProduct_Component uniqueidentifier DEFAULT NEWID(),
idProduct uniqueidentifier,
idComponent uniqueidentifier,
CONSTRAINT PK_idProduct_Component PRIMARY KEY (idProduct_Component),
CONSTRAINT FK_idComponent FOREIGN KEY (idComponent)
REFERENCES Component (ComponentId),
CONSTRAINT FK_idProduct FOREIGN KEY (idProduct)
REFERENCES Product (ProductId))
我添加了一些数据,现在我可以select
从表格中获取。产品可以有很多组件,组件在很多产品中。现在我有Product
2 行 - 蛋糕和面包。在Component
我有 3 行 - 糖、盐和面粉。我在表格中添加了值,Product_Component
现在我有一些想法,比如蛋糕包括糖和面粉,面包包括盐和面粉。我使用这样的查询
SELECT Product.ProductName, Component.ComponentName FROM Product_Component
JOIN Component
ON Product_Component.idComponent = Component.ComponentId
JOIN Product
ON Product_Component.idProduct = Product.ProductId
WHERE Product.ProductName = 'Bread'
我看到所有面包的成分,但每一行都像
bread | salt
bread | flour
我想看看这样的东西
bread | salt
| flour
| some other component
我试过
SELECT Product.ProductName, Component.ComponentName FROM Product_Component
JOIN Component
ON Product_Component.idComponent = Component.ComponentId
JOIN Product
ON Product_Component.idProduct = Product.ProductId
WHERE Product.ProductName = 'Bread'
GROUP BY Product.ProductName
但我有消息
Column 'Component.ComponentName' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
请帮助做出正确的查询。