引用同一个表作为UPDATE的目标和MySql中的数据源

luq*_*o33 4 mysql subquery sql-update

我想对我的本地数据库进行更新,其中一些字段与表中存在的另一个字段具有相同的值.

我提出了这个问题:

$wpdb->prepare(
    "
    UPDATE wp_usermeta meta
    SET meta.meta_value = (
      SELECT usermeta.meta_value
      FROM wp_usermeta usermeta
      WHERE usermeta.meta_key='nickname'
      AND usermeta.user_id = %d
    )
    WHERE meta.user_id = %d
    AND meta.meta_key='first_name'
    ",
    $userId[0],
    $userId[0]
)
Run Code Online (Sandbox Code Playgroud)

查询将在PHP循环中运行,因此每次迭代$userId都会有所不同.查询是针对WordPress数据库运行的(但这应与问题无关).

我在尝试运行查询时收到以下错误:

表'meta'被指定两次,既作为'UPDATE'的目标,又作为单独的数据源

我怎么能解决这个问题?

Gor*_*off 6

一种方法是使用join:

UPDATE wp_usermeta meta JOIN
       wp_usermeta meta2
       on meta.user_id = meta2.user_id and
          meta2.meta_key = 'nickname'
SET meta.meta_value = meta2.meta_value
WHERE meta.user_id = %d AND meta.meta_key = 'first_name';
Run Code Online (Sandbox Code Playgroud)

我可能会建议在where子句中添加一些内容,例如meta.meta_value is not null,以防第一个名称已经填充.但是,您似乎想要复制字段,这就是上面所做的.