我有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.
請幫助做出正確的查詢。
你想組CONCAT每個產品名稱的組件名稱的值?同時請發佈您嘗試的確切查詢,查詢中的「GROUP BY」在哪裏? – 2013-02-14 09:07:54
@MahmoudGamal我編輯了我的查詢 – user1947702 2013-02-14 09:12:01
對於每個分組產品名稱,您想爲組件名稱選擇什麼?你想選擇他們在同一行中分組在一起嗎?你不能簡單地在SQL中做到這一點,更好地刪除組,並在客戶端應用程序中做這種格式化的東西。 – 2013-02-14 09:12:45