【问题标题】:SQL query for insert into with update on duplicate key is error使用重复键更新插入的 SQL 查询错误
【发布时间】:2016-04-17 14:34:42
【问题描述】:

我在以下查询中遇到错误

INSERT INTO tableName3 (column1, column2)
    SELECT 
        b.column1,
        SUM (a.column2) AS SumColumn2
    FROM 
        tableName1 AS a
    JOIN 
        tableName2 AS b ON a.column1 = b.column2 
    GROUP BY 
        b.column2
ON DUPLICATE KEY UPDATE tableName3
   SET column2 = SUM (a.column2) AS SumColumn2

错误信息是

关键字“ON*”附近的语法不正确

关键字“AS”附近的语法不正确

如何解决?

【问题讨论】:

  • tableName3的key是什么?
  • sql server 怎么样?
  • tableName3的key是coloumn1
  • 对不起,上面的查询不是针对oracle而是针对sql server的

标签: sql sql-server


【解决方案1】:

首先,您的 select 语句是错误的。

SELECT 
    b.column1,
    SUM (a.column2) AS SumColumn2
FROM 
    tableName1 AS a
JOIN 
    tableName2 AS b ON a.column1 = b.column2 
GROUP BY 
    b.column2

这应该按b.column1 分组,否则你会得到一个例外,因为select 子句中的列必须出现在group by 子句中或 的聚合函数中

第二,Sql server中没有ON DUPLICATE KEY指令。快速搜索在 中找到了许多关于此的引用,但 不是

要在 Sql server 中实现这种行为,您可能应该使用MERGE 语句。

您的代码应如下所示:

MERGE tableName3  AS target
USING (
    SELECT 
    b.column1,
    SUM (a.column2) AS SumColumn2
    FROM 
    tableName1 AS a
    JOIN 
    tableName2 AS b ON a.column1 = b.column2 
    GROUP BY 
    b.column1
) AS source (column1, SumColumn2)
ON (target.column1= source.column1)
WHEN MATCHED THEN 
    UPDATE SET column2= source.SumColumn2
WHEN NOT MATCHED THEN
    INSERT (column1, column2)
    VALUES (source.column1, source.SumColumn2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多