如果列中存在值,则插入新行

时间:2015-04-01 13:21:19

标签: sql database sybase

我需要检查记录是否存在列值,如果是,则插入该记录的副本,并更新其中一个字段。

我的IncCodes表的字段是字符:

IncomeCode,
Description,
Location,
CostCentre,
NewIncomeCode

我已经有一个SQL命令,它会更新NewIncomeCode中的所有IncomeCodes,并清除NewIncomeCode列所在的位置:

UPDATE IncCodes 
SET IncomeCode = NewIncomeCode
   ,NewIncomeCode = ''
WHERE NewIncomeCode <> ''
  AND Location = Location1

但是我需要执行相同操作的命令,除了不更新IncomeCode字段,使用NewIncomeCode字段更新的IncomeCode创建重复记录。像这样的伪sql:

INSERT INTO IncCodes
VALUES (SELECT NewIncomeCode
              ,Description
              ,Location
              ,CostCentre
              ,NULL
        FROM IncCodes
        WHERE NewIncomeCode <> '')

任何建议都非常感谢。我可以根据标准看到有关插入的类似问题,但没有具体说明我需要的内容。

提前致谢。

2 个答案:

答案 0 :(得分:2)

INSERT INTO IncCodes (IncomeCode,Description,Location,CostCentre,NewIncomeCode)
SELECT NewIncomeCode
              ,Description
              ,Location
              ,CostCentre
              ,NULL
        FROM IncCodes
        WHERE NewIncomeCode <> ''

永远不要在没有指定作为SQL反模式的列的情况下编写插入,并且可能导致许多数据完整性问题。

答案 1 :(得分:1)

INSERT IGNORE INTO IncCodes
    (IncomeCode, Description, Location, CostCentre, NewIncomeCode)
SELECT
    NewIncomeCode, Description, Location, CostCentre, ''
FROM IncCodes
WHERE NewIncomeCode <> '' AND Location = Location1
;