したがって、変更する行WHERE
を制限する句を追加する必要があります。foo
UPDATE
foo f
INNER JOIN
bar b
ON
b.fooId = f.Id
SET
f.something1 = b.barSome1,
f.something2 = b.barSome1,
f.something3 = b.barSome1,
f.something4 = b.barSome1
WHERE
/* only the latest foo.Id */
f.Id = (SELECT MAX(Id) FROM foo)
/* Or f.barSome1 is NULL or an empty string */
OR (f.barSome1 IS NULL OR f.barSome1 = '')
最新のものでそれを行うにはpost_date
、次のような構成を使用します。
WHERE
f.id = (SELECT id FROM (SELECT id, post_date FROM foo HAVING post_date = MAX(post_date)) AS maxpost)
OR (f.barSome1 IS NULL OR f.barSome1 = '')
アップデート
foo
の単一の行から一致基準を持つのすべての行を変更するには、句bar
なしでサブクエリに対して結合を使用できます。ON
最初にSELECTステートメントを使用してこれをテストします。 私はこのようなことを試したことがなく、foo
テーブルが破壊された場合の責任は負いません。:)最初にバックアップします。
JOINをテストする
SELECT f.*, barsub.*
FROM
foo f
JOIN (SELECT * FROM bar WHERE Id = (SELECT MAX(Id) FROM bar)) barsub
UPDATEは同じように機能するはずです
UPDATE foo f
/* subquery returns one row so all rows of foo are joined to it */
JOIN (SELECT * FROM bar WHERE Id = (SELECT MAX(Id) FROM bar)) barsub
/* no ON clause */
SET
f.something1 = barsub.barSome1,
f.something2 = barsub.barSome1,
f.something3 = barsub.barSome1,
f.something4 = barsub.barSome1