2015-04-01 26 views
1

我需要檢查記錄中是否存在列值,如果是這樣,則插入該記錄的副本,並更新其中一個字段。如果列中出現值,則插入新行

我IncCodes表中的字段是字符:

IncomeCode, 
Description, 
Location, 
CostCentre, 
NewIncomeCode 

我已經有哪些更新全部由NewIncomeCode的IncomeCodes和清除NewIncomeCode列中的SQL命令,其中存在:

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 <> '') 

任何意見非常讚賞。我可以根據標準看到有關插入的類似問題,但沒有具體說明我需要什麼。

在此先感謝。

+1

請標記您的RDBMS名稱(SQL Server/MySQL/Oracle)。我會建議在你的問題中提供一些示例數據和預期輸出。 – 2015-04-01 13:32:41

+0

語法錯誤,請改爲「INSERT INTO IncCodes SELECT ...」 – jarlh 2015-04-01 13:38:10

+0

感謝您的更正和提示傢伙。我已經爲它標記了Sybase SQL並標記了答案 – notidaho 2015-04-01 14:02:29

回答

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

不指定columsn這是一個SQL反模式,並可能導致大量的數據完整性問題不要寫一個插件。

+0

Null必須是'',因此我給了Vlad答案。雖然謝謝! – notidaho 2015-04-01 13:59:58

相關問題