第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有動態(tài)列的MySQL樞軸表查詢

帶有動態(tài)列的MySQL樞軸表查詢

倚天杖 2019-06-14 10:41:11
帶有動態(tài)列的MySQL樞軸表查詢我使用以下表格存儲產(chǎn)品數(shù)據(jù):mysql> SELECT * FROM product;+---------------+---------------+--------+| id | name     | description   | stock  |+---------------+---------------+--------+|  1 | product1 | first product |    5   | |  2 | product2 | second product|    5   | +---------------+---------------+--------+mysql> SELECT * FROM product_additional;+-----------------+------------+| id | fieldname  | fieldvalue |+-----------------+------------+|  1 | size       | S          ||  1 | height     | 103        ||  2 | size       | L          ||  2 | height     | 13         ||  2 | color      | black      |+-----------------+------------+使用以下查詢從兩個表中選擇記錄mysql> SELECT     p.id    , p.name    , p.description    ,MAX(IF(pa.fieldname = 'size', pa.fieldvalue, NULL)) as `size`    ,MAX(IF(pa.fieldname = 'height', pa.fieldvalue, NULL)) as `height`    ,MAX(IF(pa.fieldname = 'color', pa.fieldvalue, NULL)) as `color`FROM product pLEFT JOIN product_additional AS pa ON p.id = pa.idGROUP BY p.id+---------------+---------------+--------+---------+--------+| id | name     | description   | size   | height  | color  |+---------------+---------------+--------+---------+--------+|  1 | product1 | first product | S      | 103     | null   ||  2 | product2 | second product| L      | 13      | black  |+---------------+---------------+--------+---------+--------+一切正常工作:)因為我動態(tài)地填充了“附加”表,所以如果查詢也是動態(tài)的,那就更好了。這樣,每次輸入新的字段名和字段值時,我都不必更改查詢。
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻1998條經(jīng)驗 獲得超6個贊

下面是存儲過程,它將根據(jù)來自一個表和列的數(shù)據(jù)以及來自其他表和列的數(shù)據(jù)生成表。

函數(shù)‘sum(if(coll=value,1,0)為值’。您可以從MAX(if()等不同的函數(shù)中進行選擇。

delimiter //

  create procedure myPivot(
    in tableA varchar(255),
    in columnA varchar(255),
    in tableB varchar(255),
    in columnB varchar(255))begin
  set @sql = NULL;
    set @sql = CONCAT('select group_concat(distinct concat(
            \'SUM(IF(', 
        columnA, 
        ' = \'\'\',',
        columnA,
        ',\'\'\', 1, 0)) AS \'\'\',',
        columnA, 
            ',\'\'\'\') separator \', \') from ',
        tableA, ' into @sql');
    -- select @sql;

    PREPARE stmt FROM @sql;
    EXECUTE stmt;

    DEALLOCATE PREPARE stmt;
    -- select @sql;

    SET @sql = CONCAT('SELECT p.', 
        columnB, 
        ', ', 
        @sql, 
        ' FROM ', tableB, ' p GROUP BY p.',
        columnB,'');

    -- select @sql;

    /* */
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    /* */
    DEALLOCATE PREPARE stmt;end//delimiter ;


查看完整回答
反對 回復 2019-06-14
  • 3 回答
  • 0 關(guān)注
  • 630 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號