クエリを作成しようとしていますが、行き詰まっています。
コンテキスト 私の Web サイトのユーザーは、プロファイルにさまざまなフィールドを持っています。これらのフィールドの 1 つは、ニュースレターのチェックボックスです。今、私たちは2番目のニュースレターを作るつもりです。ニュースレターを購読しているすべてのユーザーは、2 番目のニュースレターを自動的に購読し、購読を解除するオプションがあります。元のニュースレターを購読していないユーザーは、2 番目のニュースレターも受け取るべきではありません。
テーブル フィールドはテーブル「Profile_field」に保存されます。このテーブルには 3 つの列があります
- fid => フィールド ID (プロファイル名、住所、ニュースレターなど)
- uid => ユーザーID
- 価値
したがって、すべてのユーザーに対して、field1 の値を field2 にコピーする必要があります
これまでのクエリ
UPDATE profile_values AS copy
SET value =
(SELECT value
FROM ( Select Value
FROM profile_values as original
WHERE fid = 12
) AS temp
)
WHERE fid=37
;
これでエラーが発生します:
エラー 1242 (21000): サブクエリは複数の行を返します
なぜ私がこれを持っているのか理解しています。これは、サブクエリでは、ユーザーが異なるためにフィールドが複数の結果を返すことを考慮していないためです。言い換えれば、私はユーザーを考慮していません。
だから私は次のようなものを試しました
FROM ( Select Value
FROM profile_values as original
WHERE fid = 12
) AS temp
WHERE uid=copy.uid
しかし、それもうまくいきません。
エラー 1064 (42000): SQL 構文にエラーがあります。1 行目の '"temp" WHERE uid=copy.uid )where fid=37' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。
では、クエリでユーザーを考慮するにはどうすればよいでしょうか?
敬具
ステファン・セリス