如何选择 col1 值 x 并复制到 col1 值 y 的新行,如果再次运行查询,不应再次复制

Posted

技术标签:

【中文标题】如何选择 col1 值 x 并复制到 col1 值 y 的新行,如果再次运行查询,不应再次复制【英文标题】:how to select col1 value x and copy to new row with col1 value y,if run query again,should not copy again 【发布时间】:2012-10-02 17:57:43 【问题描述】:

如何将行复制到select column1 value = 55的同一张表和column 1 value = 56的新行,如果我们第二次运行查询,它不应该再次复制旧行

【问题讨论】:

【参考方案1】:

您可以添加一个where 子句来防止使用not exists 重复插入:

insert  YourTable
        (col1, col2, col3, ...)
select  56 -- New value
,       col2
,       col3
,       ...
from    YourTable
where   col1 = 55 -- Old value
        and not exists
        (
        select  *
        from    YourTable
        where   col1 = 56 -- New value
        )

【讨论】:

Andomar 先生,我们必须选择现有的 55(旧值)并将该行值添加到新值 56 正如您所写的插入 YourTable (col1, col2, col3, ...) select 56 - - 新值 .. 不会搜索 56 值来复制而不是复制 55 吗? 请不要先生。此答案将搜索值为 55 的行并创建一个副本,将 col1 中的 55 替换为 56。 好吧,安多马尔先生,我不会告诉你.. :) .. 它不工作.. 实际上我必须在 where 子句中选择 2 列值,并且必须检查 56 不存在,这没关系..错误就在不存在之前“其中col1 = 55和col2 = x并且不存在(.....) 什么错误?也许您可以在 sqlfiddle.com 或 data.stackexchange.com 上创建一个示例 我已经这样做了.. INSERT INTO DB2.table (a,b,c,d,e) SELECT 56,b,c,d,e from table WHERE a=55 and b=x并且不存在(select * from YourTable where col1 = 56 -- 新值)

以上是关于如何选择 col1 值 x 并复制到 col1 值 y 的新行,如果再次运行查询,不应再次复制的主要内容,如果未能解决你的问题,请参考以下文章

Scala DataFrame,将非空列的值复制到新列中

将选择值插入 postgres 表

如何根据特定列的值从 CSV 文件中选择值

递归选择语句

如果 col1 值退出两次并且 c​​ol2 不为空,则选择行

在 DB2 上将 HEX 值转换为 CHAR