· 8 years ago · Dec 13, 2017, 02:42 PM
1CREATE TABLE IF NOT EXISTS `produto` (
2 `produto_id` INT NOT NULL AUTO_INCREMENT,
3 `descricao` VARCHAR(45) NULL,
4 `quantidade` INT NULL,
5 PRIMARY KEY (`produto_id`))
6ENGINE = InnoDB;
7
8CREATE TABLE IF NOT EXISTS `composicao` (
9 `composicao_id` INT NOT NULL AUTO_INCREMENT,
10 `produto_id` INT NOT NULL,
11 `materia_id` INT NOT NULL,
12 PRIMARY KEY (`composicao_id`),
13 INDEX `fk_composicao_produto_idx` (`produto_id` ASC),
14 INDEX `fk_composicao_produto1_idx` (`materia_id` ASC),
15 CONSTRAINT `fk_composicao_produto`
16 FOREIGN KEY (`produto_id`)
17 REFERENCES `forum`.`produto` (`produto_id`)
18 ON DELETE NO ACTION
19 ON UPDATE NO ACTION,
20 CONSTRAINT `fk_composicao_produto1`
21 FOREIGN KEY (`materia_id`)
22 REFERENCES `produto` (`produto_id`)
23 ON DELETE NO ACTION
24 ON UPDATE NO ACTION)
25ENGINE = InnoDB;
26
27INSERT INTO produto(descricao, quantidade) VALUES('Madeira', 1),('Parafuso', 1),('Prego',1),('Carrinho de Madeira', 1);
28
29INSERT INTO composicao(produto_id, materia_id) VALUES(4,1),(4,3);
30
31SELECT
32 p.*,
33 GROUP_CONCAT(pc.descricao SEPARATOR ',') AS composicao
34FROM produto p
35LEFT JOIN composicao c
36ON p.produto_id = c.produto_id
37LEFT JOIN produto pc
38ON pc.produto_id = c.materia_id
39GROUP BY p.produto_id;