私が尋ねているのと同様の質問の解決策を見つけましたが、これまでのところ私の問題を完全に解決したものはありません。少しの繰り返しがある場合はご容赦ください。
project、stage、function、m_char_2、idの各列を含むmeta_dataテーブルがあります。
meta_data
project | stage | function | m_char_2 | id |
519 | reception | notes | 11/1272 | 2363827 |
519 | reception | diagnosis_1| | 2363827 |
519 | reception | notes | 11/1278 | 2370589 |
519 | reception | diagnosis_1| | 2370589 |
519 | reception | notes | | 2398654 |
519 | reception | diagnosis_1| 13/2586 | 2398654 |
対応するIDについて、関数値=notesの列m_char_2の値をm_char_2にコピーしたいと思います。ここで関数値=diagnostic_1です。
正常に機能する個々のIDに対してこれを実行できる構文を作成しました
UPDATE meta_data
SET m_char_2 =
(SELECT m_char_2
FROM (SELECT * FROM meta_data) AS md
WHERE
md.stage ='Reception'
AND md.function='Notes'
AND md.id = 2363827)
WHERE
project=519
AND stage='Reception'
AND function ='Diagnosis_1'
AND id = 2363827;
ただし、複数のIDで機能させることはできません。更新するレコードが100を超えているので、IDエントリごとにクエリを実行する必要はありません。
これは動作しません:
UPDATE meta_data
SET m_char_2 =
(SELECT m_char_2
FROM (SELECT * FROM meta_data) AS md
WHERE
md.stage ='Reception'
AND md.function='Notes'
AND md.id IN (2363827,2370589))
WHERE
project=519
AND stage='Reception'
AND function ='Diagnosis_1'
AND id IN (2363827,2370589);
エラーを返します#1242 subquery returns more than 1 row
。
助言がありますか?