0

次のような 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 です。

4

1 に答える 1

1

サブクエリが複数の行を返す理由を、テーブル/データをさらに表示しないとわかりません。調査を行い、重複しているレコードを見つけてください。問題を解決できるはずです。

重複を気にせず、クエリを機能させたいだけの場合LIMIT 0,1は、サブクエリで使用します

于 2011-06-09T22:09:06.500 に答える