在产品管理的场景中,我们需要对产品进行打标,因此我们可做以下的数据表结构:
产品表(tbproduct):
id |
产品Id |
product_name |
产品名 |
label_ids |
标签ID |
标签表(tblabel):
id |
标签ID |
label_name |
标签名 |
建表SQL:
CREATE TABLE `tbproduct` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '产品ID', `product_name` varchar(50) NULL COMMENT '产品名', `label_ids` varchar(50) NULL COMMENT '标签ID', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8 COMMENT='产品表'; CREATE TABLE `tblabel` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '标签ID', `label_name` varchar(50) NULL COMMENT '标签名', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8 COMMENT='标签表';
初始化数据:
-- 插入标签 INSERT INTO `mumuzxdb`.`tblabel` (`label_name`) VALUES ('海外代购'); INSERT INTO `mumuzxdb`.`tblabel` (`label_name`) VALUES ('国产'); INSERT INTO `mumuzxdb`.`tblabel` (`label_name`) VALUES ('数码'); INSERT INTO `mumuzxdb`.`tblabel` (`label_name`) VALUES ('生鲜'); INSERT INTO `mumuzxdb`.`tblabel` (`label_name`) VALUES ('零食'); -- 插入产品 INSERT INTO `mumuzxdb`.`tbproduct` (`product_name`,`label_ids`) VALUES ('鲜桃花','2,4'); INSERT INTO `mumuzxdb`.`tbproduct` (`product_name`,`label_ids`) VALUES ('旺仔牛奶','2,5'); INSERT INTO `mumuzxdb`.`tbproduct` (`product_name`,`label_ids`) VALUES ('Iphone14','1,3'); INSERT INTO `mumuzxdb`.`tbproduct` (`product_name`,`label_ids`) VALUES ('雅诗兰黛','1'); INSERT INTO `mumuzxdb`.`tbproduct` (`product_name`,`label_ids`) VALUES ('红茶','1,2,5');
此时我们想将每个产品的标签数据查询出来,那么SQL如下:
SELECT t1.id, t1.product_name, GROUP_CONCAT( t2.label_name SEPARATOR "-" ) AS label_names, t1.label_ids FROM tbproduct t1 LEFT JOIN `tblabel` t2 ON FIND_IN_SET( t2.id, t1.label_ids ) GROUP BY t1.`id`
结果如下:
其中标签表结果: