次のような INSERT INTO ステートメントを実行しようとしています。
insert into table1 (id, data1, data2) select c.id, c.data1, (select a.id
from table3 a, table2 b where b.id=c.id and a.data3=b.data3) from table2 c;
基本的にここで起こっているのは、あるテーブルから別のテーブルにデータを移行していることです。ただし、新しいテーブルでは、元のテーブルに格納されていた文字列ではなく、3 番目のテーブルの行の ID が必要です。
クエリが近いように感じますが、実行するとmysqlでエラーが発生します:
ERROR 1242 (21000): Subquery returns more than 1 row
問題はあると思いますが、特定の値にならないb.id=c.id
理由がわかりません。c.id
既知の IDに置き換えるc.id
と、クエリは期待どおりに機能します。
より一般的には、選択ステートメントの結果から現在の「現在の行」にアクセスし、その内部の選択ステートメントでその ID を使用できるようにする必要があります。
内部の select ステートメントを 1 行だけ参照するようにするにはどうすればよいですか?
これは、CentOS で実行されている MySql 5.0.77 です。