【问题标题】:Amazon Redshift: Undefined use of FROM keyword: DELETE table_name FROMAmazon Redshift:未定义 FROM 关键字的使用:DELETE table_name FROM
【发布时间】:2019-05-28 07:25:44
【问题描述】:

在阅读一位前员工的 AWS Redshift SQL 查询时,我发现了一些可以简化为:

delete
    names
from
(
    select 'Stu' AS last_name 
) kill_list
where
    kill_list.last_name = names.last;

当我对 Redshift 运行它时,它看起来就像我运行一样:

delete from
    names
using
(
    select 'Stu' AS last_name 
) kill_list
where
    kill_list.last_name = names.last;

但是,我找不到任何有关在您要从中删除的表名之后使用 FROM 子句的文档,所以我想知道这是否是有效的 sql 代码,或者它是否无效,但我们很幸运,Redshift 对其进行了评估我们想要的方式。

当我尝试在此处使用 Postgres v10 运行它时,出现语法错误: https://www.db-fiddle.com/f/nYQz84mgNMctMiS38zk5AZ/0

【问题讨论】:

  • 我不知道 Redshift,但这在 PostgreSQL 中绝对是非法的语法。可能你把查询简化得太多了。
  • 派生表(kill_list 子查询)不返回任何 ln 列,因此 kill_list.ln 条件无论如何都无效。
  • @jarlh 是的,那是我的错字。已编辑帖子。
  • @Laurenz Albe,fwiw,我对 Redshift 运行了该查询,它起作用了

标签: sql postgresql amazon-web-services amazon-redshift


【解决方案1】:

来自DELETE - Amazon Redshift

DELETE [ FROM ] table_name
[ {USING } table_name, ... ]
[ WHERE condition ]

所以,FROM 是可选的。

【讨论】:

  • 是的,但如果我从上面的查询中删除 FROM,则 Redshift 上的查询会失败。此外,该查询中的 FROM 出现在 table_name 之后,而不是之前。
猜你喜欢
  • 2022-08-12
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
  • 2013-06-01
  • 2011-11-05
  • 2021-05-20
  • 2011-11-13
  • 1970-01-01
相关资源
最近更新 更多