【问题标题】:How to select unique values from a table and insert it into another table in firebird?如何从表中选择唯一值并将其插入到 firebird 中的另一个表中?
【发布时间】:2013-03-22 08:31:02
【问题描述】:

我在 firebird 中有 2 个表,其中一个表包含重复的 ID,另一个只有唯一的 ID。所以,我想使用一个过程从重复表中选择唯一 ID 并将它们插入到唯一表中。但是,我真的不知道怎么做,有人可以帮助我吗?

编辑:这是一个例子:

有2张桌子

             ## GASFLESSEN ##            
ID CODE SUCCESS TARE_WEIGHT FILLING_NOZZLE      //< Column "CODE" contains those unique ID's.

           ## READINGS ##
      ID CODE_ID READING_TIME                   //< Column "CODE_ID" contains the duplicate ID's

谢谢大家。

【问题讨论】:

  • select * from table2
  • 啊,我的帖子不是很清楚。我已经编辑过了。我想从重复表中选择唯一值并将它们插入到包含唯一 ID 的表中。
  • 还是不清楚。唯一表中是否已经存在“来自重复项的唯一 ID”?
  • 哦..是的。对不起,对火鸟还是新手。但是,没有办法做到这一点吗?我试过使用查询,但只会运行一次命令。有没有办法在添加新的唯一 ID 的同时保持唯一表的唯一性??
  • 当然你可以这样做,但是为了给你最好的答案,最好提供更完整的信息。

标签: c# stored-procedures firebird


【解决方案1】:

如果您想在有重复项的表中获取“唯一”ID 列表,请使用DISTINCT,即

SELECT DISTINCT id FROM d

现在,如果您想进一步将结果集限制为“唯一表”中尚未包含 id 的记录,请加入表或使用 NOT EXISTS

SELECT DISTINCT id FROM d WHERE NOT EXISTS(SELECT 1 FROM u WHERE u.id = d.id)

【讨论】:

  • 这行得通,我会等到有更多答案并选择最佳答案。如果没有,我会选择你的。
【解决方案2】:
procedure CopyUniqueFromData;
declare var_id integer;
  for 
    select distinct id from d into :var_id 
  do begin
    insert into u (id) values (:var_id);
  end
end

【讨论】:

    【解决方案3】:

    有几种方法可以做到这一点。除了the answer of ain,还可以使用MERGE

    MERGE INTO table_unique
        USING (SELECT DISTINCT id FROM table_duplicates) src
        ON table_unique.id = src.id
        WHEN NOT MATCHED THEN 
            INSERT (id) values (src.id);
    

    【讨论】:

    • 什么表/列应该是'src'?提前致谢。
    • @KRS-One src 是查询 SELECT DISTINCT id FROM table_duplicates(在合并的 USING 部分中)的别名,以提醒您这是数据的来源。
    猜你喜欢
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 2012-01-23
    • 2013-05-25
    相关资源
    最近更新 更多