如何修复违反PRIMARY KEY约束?

时间:2012-09-25 17:59:00

标签: sql sql-server-2008 join

我有几个表,我写了一个sql来连接这些表并将结果插入到最终表中。最终表是tb(帐号,日期),帐号是主键。问题来自查询结果,如下所示:

account     date
0001        09/01/2012
0001        09/02/2012
0002        09/01/2012
0003        09/03/2012

当我在这些结果记录上面插入时,我违反了PRIMARY KEY约束错误。如何修复查询,我可以得到如下结果记录

account     date
0001        09/02/2012 (get the latest date)
0002        09/01/2012
0003        09/03/2012

感谢。

3 个答案:

答案 0 :(得分:2)

怎么样

INSERT INTO SomeOtherTable (account, DATE)
SELECT account,
MAX(date)
FROM YourTable
GROUP BY account

如果要向我们展示表模式,原始查询和soem示例数据,那将更有意义。

答案 1 :(得分:0)

您可以在查询中添加DISTINCTGROUP BY以防止重复。如果最终表格在此填充之前已经有一些数据,您可能还想添加相关的NOT EXISTS。例如:

INSERT dbo.FinalTable(account, [date])
  SELECT account, [date] FROM 
  (
     SELECT account, MAX([date])
       FROM --... your join here
       GROUP BY account
  ) AS src (account, [date])
  WHERE NOT EXISTS 
  (
     SELECT 1 
       FROM dbo.FinalTable 
       WHERE account = src.account
       AND [date]  = src.[date]
  );

另请考虑为date列使用更有意义(且非保留)的字词。

编辑抱歉,错过了(get the latest date)位。

答案 2 :(得分:-1)

我认为插入时需要ORDER BY date DESC GROUP BY account。但是,如果你已经在表格中有0001,那么仅此一项将不起作用。

您需要插入不存在的记录,然后更新现有记录(如果这是您想要的)