4

我有一个包含 a、b、expr 列的表,其中 expr 是来自其他列的表达式。例如表包含

a   b   expr
------------
2   5   a+b
3   4   a*b+3

我喜欢简单地运行一个查询并获得流动的结果:

a | b | expr 
------------ 
2 | 5 | 7 
3 | 4 | 15

我在文档中搜索功能、过程等,但我做不到。请帮我!

4

2 回答 2

2

这是我为好玩而制作的解决方案。如果这不是一次性的事情,请考虑使用真正的编程语言来解决这个问题。

drop table if exists Table1;
CREATE TABLE Table1
    (`a` int, `b` int, `expr` varchar(6))
;

INSERT INTO Table1
    (`a`, `b`, `expr`)
VALUES
    (2, 5, 'a+b'),
    (3, 4, 'a*b +3')
;

drop table if exists Table2;
CREATE TABLE Table2
    (`a` int, `b` int, `expr` int)
;

drop procedure if exists curdemo;
DELIMITER $$
CREATE PROCEDURE curdemo()
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE seqel VARCHAR(255);
  DECLARE cur1 CURSOR FOR SELECT CONCAT('INSERT INTO Table2 (a, b, expr) SELECT a, b, ' , expr, ' FROM (SELECT ', a, ' as a, ', b, ' as b) sq;') FROM Table1;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

  OPEN cur1;

  REPEAT
    FETCH cur1 INTO seqel;
    IF NOT done THEN
       SET @sql:=seqel;
       PREPARE stmt FROM @sql;
       EXECUTE stmt;
       DEALLOCATE PREPARE stmt;
    END IF;
  UNTIL done END REPEAT;

  CLOSE cur1;
END $$
DELIMITER ;

CALL curdemo();

SELECT * FROM Table2;
于 2013-06-11T14:42:40.733 回答
-1

如果我正确理解了您的问题,这就是您要寻找的内容:

SELECT a, b, (a+b) AS expr FROM yourtable;
于 2013-06-11T14:05:34.123 回答