2017-11-06 22 views
-1

2つのテーブルAとB(Oracleデータベース)があります。表Bには、idとmdateの2つの列があり、idは主キーです。表AにはIdとmdateの2つのカラムがあり、idは外部キーです。私は一致するIDのテーブルAの最大値でなければならないテーブルBの値を更新したい。別のテーブルの最大値に基づいてテーブル値を更新したい

Update b 
set mdate= (select max(mdate) from a group by Id) 
where b.id = a.id; 
+0

rdbmsとは何ですか? SQL Server、Postgres、oracle? –

+0

あなたは、MySQLとOracleの両方にタグを付けました。どちらですか? – Barmar

+0

'WHERE b.id = a.id'をサブクエリに移動します。 – Barmar

答えて

0

あなたは非常に近いです。 WHERE句は、相関サブクエリにするためにサブクエリに移動する必要があります。また、UPDATEのパラメータはテーブル名であり、カラム名ではありません。

UPDATE b 
SET mdate = (SELECT MAX(mdate) FROM a WHERE b.id = a.id) 

は、MySQLであなたもJOINでそれを行うことができます氏Barmarへ

UPDATE b 
JOIN (SELECT id, MAX(mdate) AS mdate 
     FROM a 
     GROUP BY id) AS a ON a.id = b.id 
SET b.mdate = a.mdate 
+0

mysqlでエラーが発生しているので、mysqlの解決策を提案してください。(まだoracleをチェックしていません) –

+0

これはMySQLで動作するはずです。 – Barmar

+0

MySQLで使用する 'JOIN'バージョンを追加しました。あなたはどんなエラーを受けていましたか? – Barmar

0
Update b 
set(b.mdate) = (select MAX(a.mdate) from a where b.id = a.id) 
where exists (select 1 from a where b.id = a.id); 

感謝を。

関連する問題