表table1資料如下。 如何讓KEY不同的value分別交叉組合
當前select * from table1資料如下
KEY value
1 藍色
1 紅色
2 大號
2 小號
61 精品
61 普通品
交叉組合后可顯示
欄位1 欄位2
1 藍色/大號/精品
2 藍色/大號/普通品
3 藍色/小號/精品
4 藍色/小號/普通品
5 紅色/大號/精品
6 紅色/大號/普通品
7 紅色/小號/精品
8 紅色/小號/普通品
我就想問一下動態陳述句怎么寫。靜態陳述句我已經寫出來了。 就是資料是動態的要怎么實作。謝謝。急。
uj5u.com熱心網友回復:
周末沒人上CSDN嗎?uj5u.com熱心網友回復:
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 ;
uj5u.com熱心網友回復:
我資料是會變化的。再加個中號,加個黑色。怎么弄。這個靜態的沒有任何意義吧uj5u.com熱心網友回復:
我沒有你的表,所以自己寫了一個臨時表,你可以增加幾億個型號,再加幾百億個顏色都沒有問題。只要你的分組是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 )
uj5u.com熱心網友回復:
我的分組是變化的。就像淘寶上的衣服尺寸,有大號、小號、尺寸、顏色、可能還要男款、女款、都是變化的。uj5u.com熱心網友回復:
要是分類也持續增加的話,這個陳述句可是有難度,最好能說一下您的需求,也許可以在其他的環節上解決問題。
uj5u.com熱心網友回復:
已經搞定了。用游標+SQL陳述句拼接。笛卡爾積 的邏輯。謝謝uj5u.com熱心網友回復:
函式還是存盤程序啊uj5u.com熱心網友回復:
肯定要用存盤程序的。游標回圈uj5u.com熱心網友回復:
為啥一定要用存盤程序,為啥一定要回圈,簡單復雜化。看看下邊的代碼。
首先,建表腳本。
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 ;
有啥問題請回復,咱們再研究。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/66911.html
標籤:MySQL
上一篇:外賣系統的活動圖是怎么樣的
下一篇:多條件任意組合怎么建立索引呢
