【问题标题】:UPDATING a table which is selected using SELECT query in SQL更新使用 SQL 中的 SELECT 查询选择的表
【发布时间】:2020-01-30 19:01:19
【问题描述】:

我想使用 Update 关键字和 select 类似的东西

UPDATE(select col1,col2,col3 from UNPIVOTED_TABLE)
SET col1=0
WHERE col1 IS NULL
SET col2=0
WHERE col2 is NULL
SET col3=0
WHERE col3 is NULL

我知道我的语法不正确,但这基本上是我想要实现的目标

我选择了 3 列,我想更新一些 null 值并将其设置为 0

我也无法更新表本身,因为原始表是UNPIVOTED,而我在 select 语句中是PIVOTING,我需要透视结果(即我选择的列)(col1,col2,col3 )

如果相关的话,我也在使用亚马逊雅典娜

【问题讨论】:

  • 您是在寻找update 语句(实际修改某个表中的数据),还是在寻找select
  • 您可能需要向我们展示示例数据和预期结果以澄清您的问题。你的 SQL 没有意义。
  • 您使用的是雅典娜还是 MySQL?这是两种不同的数据库产品,请仅标记您正在使用的一种。
  • 这只是UPDATE UNPIVOTED_TABLE SET col1 = COALESCE(col1, 0), col2 = COALESCE(col2, 0), col3 = COALESCE(col3, 0) WHERE col1 IS NULL OR col2 IS NUL or col3 IS NULL ?
  • 使用SELECT id, ... , COALESCE(col1, 0) AS col1, COALESCE(col2, 0) AS col2, COALESCE(col2, 0) col3, ... FROM UNPIVOTED_TABLE;查询而不是表。

标签: sql select presto amazon-athena


【解决方案1】:

如果我没听错,你只需要coalesce()

select 
    coalesce(col1, 0) col1,
    coalesce(col2, 0) col2,
    coalesce(col3, 0) col3
from unpivoted_table

colaesce() 检查第一个参数是否为null:如果不是,则按原样返回原始值,否则返回给定第二个参数的值。

【讨论】:

  • 非常感谢 varchar,如果我想将所有空值设置为 notspecified,我应该做一些类似 coalesce(col1,notspecified) col1
  • 基本上,是的。只是不要忘记用单引号括住你的字符串('not specified'
【解决方案2】:

如果您使用的是 Athena,我可以假设您具有只读访问权限并且无法真正更新原始数据。

在您的情况下,如果您想将空值表示为 0,您可以使用 `IFNULL(column, 0)

有关 IFNULL 的更多信息,您可以阅读here

【讨论】:

  • 我认为 Athena 不支持 IFNULL
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多