3

如果我有这个:

CREATE TABLE ftable (
id     INT,
fvalue VARCHAR(14)
);

INSERT INTO ftable VALUES (1,'tableB'),(2,'tableA');

CREATE TABLE tableA (
value VARCHAR(14)
);

SELECT @tmp:=fvalue FROM ftable WHERE id=2;

我该怎么做才能做到这一点:

INSERT INTO @tmp VALUES ('buhambug');

因为据我所知,这会引发 mysql 错误。有人可以告诉我解决方案的 sqlfiddle 吗?或者,也许我在想这个错误的方式?

4

2 回答 2

4

您需要使用动态 SQL 来使用变量作为对象名称:

SET @tmp = (SELECT fvalue FROM ftable WHERE id=2);

SET @SQL = CONCAT('INSERT INTO ',@tmp,' VALUES (''buhambug'')');
PREPARE stmt FROM @SQL;
EXECUTE stmt;

SQL 小提琴

于 2012-09-20T11:47:02.270 回答
0

你不能在静态sql中做。您可以在存储过程中执行此操作:

delimiter $$

drop procedure if exists test_call$$

create procedure test_call(table_in varchar(100))
begin
  set @q = concat("select * from ", table_in);

  PREPARE stmt FROM @q;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;

end$$

delimiter ;

call test_call('TeableA');

drop procedure if exists test_call;

一般来说,从动态表中动态读取不是一个好的决定

于 2012-09-20T11:43:05.887 回答