从 Azure SQL DW 中更新?

2024-02-20

我在尝试执行 UPDATE FROM 查询时在 Azure SQL DW 中收到错误。错误是“UPDATE 和 DELETE 语句中的 FROM 子句不能包含子查询源或联接”

这只是 SQL DW 特有的吗?除此之外,我认为这个查询没有任何问题。如果这是 SQL DW 的限制,有什么替代方案?

-- Permanent fact table with 5 billion rows
CREATE TABLE FactTable (Id1 INT, Id2 INT, EmailAddress NVARCHAR(100), Value1 INT)
WITH (DISTRIBUTION = HASH(EmailAddress));

-- Staging fact table with 10 million rows    
CREATE TABLE StageTable (Id1 INT, Id2 INT, EmailAddress NVARCHAR(100), Value1 INT)
WITH (DISTRIBUTION = HASH(EmailAddress), HEAP);

-- Add a secondary index that should help with joining to StageTable
CREATE NONCLUSTERED INDEX ix ON FactTable (Id1, Id2);

UPDATE fact
SET
   Value1 = CASE WHEN stage.Value1 > fact.Value1 THEN stage.Value1 ELSE fact.Value1 END
FROM FactTable AS fact
INNER JOIN StageTable AS stage ON fact.Id1 = stage.Id1 AND fact.Id2 = stage.Id2

As per 文档 https://learn.microsoft.com/en-us/sql/t-sql/queries/update-transact-sqlAzure SQL 数据仓库确实支持UPDATE但不支持 ANSI 加入FROM条款。您可以使用 CTAS 来解决此问题。简单的两表更新:

UPDATE dbo.FactTable
SET
   Value1 = CASE WHEN stage.Value1 > dbo.FactTable.Value1 THEN stage.Value1 ELSE dbo.FactTable.Value1 END
FROM dbo.StageTable AS stage
WHERE dbo.FactTable.Id1 = stage.Id1 
  AND dbo.FactTable.Id2 = stage.Id2;

CTAS 的更复杂示例,从主更新文档页面 https://learn.microsoft.com/en-us/sql/t-sql/queries/update-transact-sql#examples-includesssdwincludessssdw-mdmd-and-includesspdwincludessspdw-mdmd:

-- Create an interim table
CREATE TABLE CTAS_acs
WITH (DISTRIBUTION = ROUND_ROBIN)
AS
SELECT  ISNULL(CAST([EnglishProductCategoryName] AS NVARCHAR(50)),0)    AS [EnglishProductCategoryName]
,       ISNULL(CAST([CalendarYear] AS SMALLINT),0)                      AS [CalendarYear]
,       ISNULL(CAST(SUM([SalesAmount]) AS MONEY),0)                     AS [TotalSalesAmount]
FROM    [dbo].[FactInternetSales]       AS s
JOIN    [dbo].[DimDate]                 AS d    ON s.[OrderDateKey]             = d.[DateKey]
JOIN    [dbo].[DimProduct]              AS p    ON s.[ProductKey]               = p.[ProductKey]
JOIN    [dbo].[DimProductSubCategory]   AS u    ON p.[ProductSubcategoryKey]    = u.[ProductSubcategoryKey]
JOIN    [dbo].[DimProductCategory]      AS c    ON u.[ProductCategoryKey]       = c.[ProductCategoryKey]
WHERE   [CalendarYear] = 2004
GROUP BY
        [EnglishProductCategoryName]
,       [CalendarYear]
;

-- Use an implicit join to perform the update
UPDATE  AnnualCategorySales
SET     AnnualCategorySales.TotalSalesAmount = CTAS_ACS.TotalSalesAmount
FROM    CTAS_acs
WHERE   CTAS_acs.[EnglishProductCategoryName] = AnnualCategorySales.[EnglishProductCategoryName]
AND     CTAS_acs.[CalendarYear]               = AnnualCategorySales.[CalendarYear]
;

--Drop the interim table
DROP TABLE CTAS_acs
;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Azure SQL DW 中更新? 的相关文章

随机推荐

  • SQL 查询获取一行以及关联行的计数

    我有两张表 如下所示 Articles ID Title 1 Article title 2 2nd article title Comments ID ParentID Comment 1 1 This is my comment 2 1
  • 2 不同类中具有相同名称的扩展方法在 Scala 3 中不起作用?

    我有以下场景 case class B v String case class A bs Seq B extension a A def doit a bs map doit here is the exception extension
  • 如果设备重新启动,则启动 AlarmManager

    在我的应用程序中 我想每天在特定时间使用AlarmManager 在里面安卓文档 http developer android com reference android app AlarmManager html我找到了这个 注册的警报在
  • Java 将 JLabel 对齐在 JPanel 的中心

    我的应用程序顶部有一个栏 JLabel 两侧都有许多按钮 按钮的可见性取决于用户正在执行的当前任务 并且按钮的文本之一也可能根据当前状态而改变 我想做的是将许多按钮粘在 JPanel 的左侧 JLabel 的中心位于 JPanel 的正中心
  • NodeJS 的 Selenium Webdriver 的文档在哪里?

    我似乎没有找到任何一个 我总是找到的唯一一个是这个 https code google com p selenium wiki WebDriverJs https code google com p selenium wiki WebDri
  • 如何从一个模块向另一个模块发送消息?

    Angular有模块间通信的集成解决方案吗 如何将数据从一个模块发送到另一个模块 也许有一些事件循环 我将有一个您的两个通信模块所依赖的通用模块 公共模块将通过公开一个中介者模式来提供中介者模式的实现 service https docs
  • 我可以通过PHP语言控制硬件吗?

    我想知道是否可以使用PHP来控制与并行端口或USB端口连接的外部硬件 有什么想法或资源吗 对于 Linux 上的串行连接设备来说 这是一个有用的类 PHP串口 http www phpclasses org browse package 3
  • laravel uuid 未在查询中显示

    我有一个 postgres 数据库表 它使用 uuid 作为主键 通过webpatser laravel uuid包 以及 可读 的网络 ID 通过温克拉 哈希德 当我查询数据库时 如果我dd 响应中 我看到了完整的 UUID 但如果我只是
  • LiveCharts WPF 实时数据缓慢。提高 LiveCharts 实时绘图性能

    我正在研究在 WPF 应用程序中使用 LiveChart 来实时绘制温度测量结果 我整理了一个简单的折线图示例 以 10Hz 读取数据 并为每个样本重新绘制 然而 我发现重绘率约为 1Hz 对于 WPF 实时图表工具来说 这似乎非常慢 我的
  • 对 RichTextBox 字符串的不同部分着色

    我正在尝试对要附加到 RichTextBox 的字符串部分进行着色 我有一个由不同字符串构建的字符串 string temp DateTime Now ToShortTimeString userid message Environment
  • bootstrap datepicker、beforeShowDay 和禁用日期数组

    我正在尝试使用引导日期选择器插件 https github com eternicode bootstrap datepicker blob release docs index rst https github com eternicod
  • Xamarin:如何获取光标/触摸坐标(位置X和Y)?

    介绍 我正在创建我的第一个 Xamarin 应用程序 首先针对 UWP 然后是 Android 最后可能是 iOS 基本上 应用程序应该检测多个手指 并且圆圈会在每个手指上弹出并跟随它们 My app 首先 我认为 UI 和图形无法使用 X
  • 从 Heroku 上运行的 Celery 任务连接时出现 MySQL 查询错误

    在对外部 MySQL 数据库执行查询时 但仅在从 Heroku 上运行的 Celery 任务连接时 我看到错误的查询结果 同样的任务 在我自己的机器上运行时不会显示这些错误 并且错误只出现大约一半的时间 尽管当它们失败时 all任务是错误的
  • 欧拉计划:#8 [重复]

    这个问题在这里已经有答案了 当试图回答这个问题时 1000位数字中相邻的四个数字 最大乘积为 9 9 8 9 5832 73167176531330624919225119674426574742355349194934 969835203
  • 如何在 Doctrine 查询生成器中进行多个 WHERE IN 列查询?

    我想使用带有两列检查的 WHERE IN 语句更新数据库中的多条记录 纯 MySql 原始查询看起来像这样 并且它有效 UPDATE poll quota q SET q count q count 1 WHERE q form id 14
  • 使用 PHP 缩进 HTML(5) 时出现问题

    免责声明 请坦白这个问题的长度 这是我见过的现实世界问题中反复出现的问题 数百次都没有明确的 可行的解决方案 呈现 我有数百个 HTML 文件 我想使用 PHP 进行批量缩进 起初我想到使用 Tidy 但你应该知道 它默认与 HTML5 标
  • xCode 7:链接器命令失败,退出代码为 1(使用 -v 查看调用)

    当我在模拟器中运行我的应用程序时 一切正常 但是当我尝试在我的设备 iOS 8 4 上运行它时 我收到此错误 ld warning directory not found for option F Applications Xcode be
  • R闪亮:将文本显示为多行代码

    我想在我闪亮的应用程序上显示一些 R 代码 因此 我用了verbatimTextOutput但我找不到换行和显示代码段落的方法 这个解决方案 在 R Shiny 中使用 renderText 输出多行文本 https stackoverfl
  • Java中有通配符这样的东西吗?

    我正在运行一个比较程序 此时它会进行直接的 字符串到字符串 比较 如果它们完全匹配 则输出它们是匹配的 好吧 我希望添加一个允许 相似性 的附加功能 例如 String em1 52494646 String em2 52400646 if
  • 从 Azure SQL DW 中更新?

    我在尝试执行 UPDATE FROM 查询时在 Azure SQL DW 中收到错误 错误是 UPDATE 和 DELETE 语句中的 FROM 子句不能包含子查询源或联接 这只是 SQL DW 特有的吗 除此之外 我认为这个查询没有任何问