Nelze vytvořit vnořenou tabulku. A věc, na kterou myslíte, není dobrý nápad navrhnout takový stůl. Měli byste mít dvě tabulky (přesně tři, které obsahují popis kategorie ). Jeden je pro product
a druhá tabulka obsahuje kategorii pro každý produkt . Příklad návrhu by vypadal takto,
CREATE TABLE Product
(
ProductID INT PRIMARY KEY,
ProductName VARCHAR(50) UNIQUE
);
CREATE TABLE Category
(
CategoryID INT PRIMARY KEY,
CategoryName VARCHAR(50) UNIQUE
);
CREATE TABLE Product_Category
(
RecordD INT AUTO_INCREMENT PRIMARY KEY,
CategoryID INT,
ProductID INT,
CONSTRAINT tb_uq UNIQUE(CategoryID, ProductID)
);
a Naplnit vzorové záznamy
INSERT Category VALUES (1, 'Fruit');
INSERT Category VALUES (2, 'Vegetable');
INSERT Product VALUES (1, 'Apple');
INSERT Product VALUES (2, 'Banana');
INSERT Product VALUES (3, 'Cabbage');
INSERT Product VALUES (4, 'Squash');
INSERT Product VALUES (5, 'Tomato');
INSERT Product_Category (CategoryID, ProductID) VALUES (1,1);
INSERT Product_Category (CategoryID, ProductID) VALUES (1,2);
INSERT Product_Category (CategoryID, ProductID) VALUES (2,3);
INSERT Product_Category (CategoryID, ProductID) VALUES (2,4);
INSERT Product_Category (CategoryID, ProductID) VALUES (1,5);
INSERT Product_Category (CategoryID, ProductID) VALUES (2,5);
ukázkové dotazy
-- NORMAL QUERY
SELECT a.ProductName, c.CategoryName
FROM Product a
INNER JOIN Product_category b
ON a.ProductID = b.ProductID
INNER JOIN Category c
ON b.CategoryID = c.CategoryID
ORDER BY ProductName;
-- If you want catgoryName to be comma separated
SELECT a.ProductName, GROUP_CONCAT(c.CategoryName) CategoryList
FROM Product a
INNER JOIN Product_category b
ON a.ProductID = b.ProductID
INNER JOIN Category c
ON b.CategoryID = c.CategoryID
GROUP BY ProductName
ORDER BY ProductName;