说我有以下数据:
name is_married has_dog wants_children
Tom 1 1 1
Dick 0 1 1
Harry 0 0 0
但我想提供以下数据:
name description
Tom is_married
Tom has_dog
Tom wants_children
Dick has_dog
Dick wants_children
即,我希望将这些各种二进制字段中保存的信息放入一个表格中,其中每个二进制正字符都是'在它自己的行中显示。
如果有数百个二进制列,是否有办法使这种可扩展性?
答案 0 :(得分:0)
这是一个应该扩展的例程。
示例:
DELIMITER $$
CREATE PROCEDURE myproc()
BEGIN
DECLARE sql_stmt varchar(200);
DECLARE exit_loop INTEGER DEFAULT 0;
DECLARE col_names CURSOR FOR SELECT CONCAT('select name, "', column_name, '" As Description from tbl where ' , column_name, '=1')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tbl'
and column_name <> 'Name'
ORDER BY ordinal_position;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE;
CREATE TEMPORARY TABLE temp (name varchar(200), description varchar(200));
OPEN col_names;
the_loop: LOOP
FETCH col_names
INTO sql_stmt;
IF exit_loop THEN
CLOSE col_names;
LEAVE the_loop;
END IF;
SET @s = CONCAT('INSERT INTO temp(name, description) ',sql_stmt);
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
END LOOP the_loop;
SELECT * from temp ORDER BY name;
DROP TABLE temp;
END$$
DELIMITER ;
结果:
mysql> call myproc();
+------+----------------+
| name | description |
+------+----------------+
| Tom | ismarried |
| Tom | hasdog |
| Tom | wants_children |
| Dick | hasdog |
| Dick | wants_children |
+------+----------------+
5 rows in set (0.00 sec)