一张表中数据如何交叉组成集合的语句?

zly22169846 2019-03-16 09:49:52
表table1数据如下。 如何让KEY不同的value分别交叉组合
当前select * from table1数据如下

KEY value
1 蓝色
1 红色
2 大号
2 小号
61 精品
61 普通品


交叉组合后可显示

字段1 字段2
1 蓝色/大号/精品
2 蓝色/大号/普通品
3 蓝色/小号/精品
4 蓝色/小号/普通品
5 红色/大号/精品
6 红色/大号/普通品
7 红色/小号/精品
8 红色/小号/普通品




我就想问一下动态语句怎么写。静态语句我已经写出来了。 就是数据是动态的要怎么实现。谢谢。急。
...全文
319 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
AHUA1001 2019-04-09
  • 打赏
  • 举报
回复
为啥一定要用存储过程,为啥一定要循环,简单复杂化。
看看下边的代码。
首先,建表脚本。
CREATE TABLE `table1` (
`KEY` VARCHAR(2) NOT NULL DEFAULT '',
`VALUE` VARCHAR(3) NOT NULL DEFAULT ''
) ;
然后,插入测试数据,您可以在这个基础上,随意添加、修改、删除数据。
insert into `table1`(`KEY`,`VALUE`) values
('1','蓝色'),
('1','红色'),
('2','大号'),
('2','小号'),
('61','精品'),
('61','普通品');
最后,执行以下代码,不是一条一条的单独执行,而是全部选择后,一起执行。
SET @R1 := 0 ;
SET @R2 := 0 ;
SET @S := '' ;
SELECT CONCAT("SELECT @R2:=@R2+1 S1,CONCAT_WS('/',",S1,') S2 FROM ' ,S2,' WHERE ',S3,';') INTO @S FROM (SELECT GROUP_CONCAT('T',R,'.','VALUE') S1,GROUP_CONCAT('TABLE1',' T',R) S2,REPLACE(GROUP_CONCAT('T',R,'.KEY=',T.KEY),',',' AND ') S3 FROM (SELECT @R1:=@R1+1 R,T.KEY FROM TABLE1 T GROUP BY T.KEY) T) T ;
PREPARE stmt1 FROM @S ;
EXECUTE stmt1 ;
有啥问题请回复,咱们再研究。
zly22169846 2019-03-23
  • 打赏
  • 举报
回复
肯定要用存储过程的。游标循环
AHUA1001 2019-03-22
  • 打赏
  • 举报
回复
函数还是存储过程啊
AHUA1001 2019-03-20
  • 打赏
  • 举报
回复
引用 5 楼 zly22169846 的回复:
我的分组是变化的。就像淘宝上的衣服尺寸,有大号、小号、尺寸、颜色、可能还要男款、女款、都是变化的。

要是分类也持续增加的话,这个语句可是有难度,最好能说一下您的需求,也许可以在其他的环节上解决问题。
zly22169846 2019-03-20
  • 打赏
  • 举报
回复
已经搞定了。用游标+SQL语句拼接。笛卡尔积 的逻辑。谢谢
zly22169846 2019-03-19
  • 打赏
  • 举报
回复
我的分组是变化的。就像淘宝上的衣服尺寸,有大号、小号、尺寸、颜色、可能还要男款、女款、都是变化的。
zly22169846 2019-03-19
  • 打赏
  • 举报
回复
我数据是会变化的。再加个中号,加个黑色。怎么弄。这个静态的没有任何意义吧
AHUA1001 2019-03-19
  • 打赏
  • 举报
回复
我没有你的表,所以自己写了一个临时表,你可以增加几亿个型号,再加几百亿个颜色都没有问题。
只要你的分组是3组就不会有问题。
比如,你的表名是table1,把我的那个临时表,缓冲你的表名table1就可以了。
我的临时表:
(
SELECT '1' `KEY`,'蓝色' VALUE FROM DUAL UNION ALL
SELECT '1' `KEY`,'红色' VALUE FROM DUAL UNION ALL
SELECT '2' `KEY`,'大号' VALUE FROM DUAL UNION ALL
SELECT '2' `KEY`,'小号' VALUE FROM DUAL UNION ALL
SELECT '61' `KEY`,'精品' VALUE FROM DUAL UNION ALL
SELECT '61' `KEY`,'普通品' VALUE FROM DUAL )
AHUA1001 2019-03-18
  • 打赏
  • 举报
回复


SELECT @R:=@R+1 `KEY`,t.value FROM (
SELECT @R:=0,CONCAT_WS('/',t1.value,t2.value,t3.value) VALUE FROM (
SELECT '1' `KEY`,'蓝色' VALUE FROM DUAL UNION ALL
SELECT '1' `KEY`,'红色' VALUE FROM DUAL UNION ALL
SELECT '2' `KEY`,'大号' VALUE FROM DUAL UNION ALL
SELECT '2' `KEY`,'小号' VALUE FROM DUAL UNION ALL
SELECT '61' `KEY`,'精品' VALUE FROM DUAL UNION ALL
SELECT '61' `KEY`,'普通品' VALUE FROM DUAL ) t1
JOIN (
SELECT '1' `KEY`,'蓝色' VALUE FROM DUAL UNION ALL
SELECT '1' `KEY`,'红色' VALUE FROM DUAL UNION ALL
SELECT '2' `KEY`,'大号' VALUE FROM DUAL UNION ALL
SELECT '2' `KEY`,'小号' VALUE FROM DUAL UNION ALL
SELECT '61' `KEY`,'精品' VALUE FROM DUAL UNION ALL
SELECT '61' `KEY`,'普通品' VALUE FROM DUAL ) t2 ON 1=1
JOIN (
SELECT '1' `KEY`,'蓝色' VALUE FROM DUAL UNION ALL
SELECT '1' `KEY`,'红色' VALUE FROM DUAL UNION ALL
SELECT '2' `KEY`,'大号' VALUE FROM DUAL UNION ALL
SELECT '2' `KEY`,'小号' VALUE FROM DUAL UNION ALL
SELECT '61' `KEY`,'精品' VALUE FROM DUAL UNION ALL
SELECT '61' `KEY`,'普通品' VALUE FROM DUAL ) t3 ON 1=1
WHERE t1.`KEY` = '1' AND t2.`KEY` = '2' AND t3.`KEY` = '61') t ;
zly22169846 2019-03-16
  • 打赏
  • 举报
回复
周末没人上CSDN吗?

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧