【问题标题】:SQL UPDATE on the same table with WHERE使用 WHERE 在同一张表上进行 SQL UPDATE
【发布时间】:2021-06-24 00:09:54
【问题描述】:

我有下表,我想用与 id_lang=2 的名称相同的值填充名称列的空值。 知道 sql 查询应该是什么吗?

id_product id_lang name
1 1 -
1 2 name1
2 1 -
2 2 name2
3 1 -
3 2 name3
4 1 -
4 2 name4

【问题讨论】:

  • 请显示您到目前为止尝试了什么。并标记您的 DBMS。
  • 你用的是什么数据库?

标签: sql select where-clause


【解决方案1】:

一种应该起作用的通用方法使用相关子查询:

UPDATE yourTable t1
SET name = (SELECT name FROM yourTable t2
            WHERE t2.id_product = t1.id_product AND t2.id_lang = 2)
WHERE
    name IS NULL;

【讨论】:

  • 虽然看起来这是正确的方法,但我得到了一个 SQL 错误,但我仍然无法找到正确的语法。 #1093 - 您不能在 FROM 子句中指定目标表 't1' 进行更新
【解决方案2】:

您可以使用子查询:UPDATE table SET name = (SELECT DISTINCT name FROM table WHERE id_lang = 2)

【讨论】:

    【解决方案3】:

    在查询中,您可以简单地使用窗口函数:

    select t.*,
           coalesce(name,
                    max(case when id_lang = 2 then name end) over (partition by id_product)
                   ) as imputed_name
    from t;
    

    注意:这里假设 - 真的意味着 NULL。如果是字符串,上面可以调整为使用CASE

    如果您想更改表中的数据,也可以在 update 中轻松执行此操作。但是,最好的方法取决于数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 2021-12-20
      • 2018-01-07
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多