Du kan ikke oprette indlejret tabel. Og det, du tænker på, er ikke en god idé at designe et bord sådan. Du skal have to tabeller (nøjagtig tre, som indeholder beskrivelsen, hvis kategorien ). Den ene er til produktet
og den anden tabel indeholder kategorien for hvert produkt . Eksempeldesign ville se sådan ud,
CREATE TABLE Product( ProductID INT PRIMARY KEY, ProductName VARCHAR(50) UNIQUE);CREATE TABLE Category( CategoryID INT PRIMARY KEY, CategoryName VARCHAR(50) UNIQUE); CategoryID INT, ProductID INT, CONSTRAINT tb_uq UNIQUE(CategoryID, ProductID));
og udfyld prøveregistreringer
INSERT Category VALUES (1, 'Fruit');INSERT Category VALUES (2, 'Grøntsag');INSERT Product VALUES (1, 'Apple');INSERT Product VALUES (2, 'Banana'); INDSÆT produktværdier (3, 'Kål'); INDSÆT produktværdier (4, 'Squash'); INDSÆT produktværdier (5, 'Tomat'); INDSÆT Produkt_Kategori (Kategori-ID, Produkt-ID) VÆRDIER (1,1); INDSÆT Produkt_Kategori ( 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);
eksempelforespørgsler
-- NORMAL QUERYSELECT a.ProductName, c.CategoryNameFROM Product a INNER JOIN Product_category b ON a.ProductID =b.ProductID INNER JOIN Category c ON b.CategoryID =c.CategoryIDORDER BY ProductName;-- Hvis du ønsker, at catgoryName skal være kommasepareret.VÆLG a.ProductName, GROUP_CONCAT(c.CategoryName) CategoryListFROM Product a INNER JOIN Product_category b ON a.ProductID =b.ProductID INNER JOIN Category c ON b.CategoryID =c.CategoryIDGROUP BY ProductName; kode>