プリペアドステートメントがトリガー内で許可されていないことは理解していますが、他にどのようにやりたいことができるかわからないので、代替案/回避策をいただければ幸いです。
DELIMITER $$
CREATE TRIGGER trigger1 after INSERT on table1
FOR EACH ROW
begin
DECLARE a varchar(30);
DECLARE b varchar(30);
DECLARE c varchar(30);
DECLARE d varchar(30);
SET a = new.Col1;
SET b = new.Col2;
SET c = (select Col4 from table2 where Col3=new.Col3);
SET d = concat('select ',a,' from table3 where yq=',c,' and xz=',b);
insert into table4 values (d);
end
$$
DELIMITER;
Col1
つまり、何が起こっているのでしょうか。行が挿入され、その行、、、、Col2
およびから3つの値が取得されますnew.Col3
。
new.Col3
は別のテーブルから行を取得するために使用され、次に、Col2
必要な値がある3番目のテーブルを検索するために使用されます。
Col1
は動的に生成された列名であると想定されているため、問題になりますd
が、これは機能しません。したがって、明らかに現時点で私が返しているのは、d
私が期待しているselectステートメントの文字列だけですが、それが許可されていないため、ステートメントを実行できません。では、動的に生成された列名をselectステートメントに取り込むにはどうすればよいですか?
表1
Col1 | Col2 | Col3
c | d | x
a | e | y
b | e | z
b | f | x
表2
Col3 | Col4
x | 1
y | 2
z | 3
表3
a | b | c | xz | yq
1a | 1b | 1c | d | 1
2a | 2b | 2c | d | 2
3a | 3b | 3c | d | 3
4a | 4b | 4c | e | 1
5a | 5b | 5c | e | 2
6a | 6b | 6c | e | 3
7a | 7b | 7c | f | 1
8a | 8b | 8c | f | 2
9a | 9b | 9c | f | 3
私が欲しい結果は1a-9cからです。
トリガーの列名を修正できるようにテーブルスキーマを変更することを検討しましたが、他のコードビットで問題が発生するため、これは最後の手段になります。