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 に答える