0

我目前有一个包含数千个条目的表。我找到了一种为系统中的所有条目插入新数据行的方法(请参见下面的示例),但不幸的是,我刚刚发现某些条目中已经存在值。我试图弄清楚如何根据行是否已经存在来有选择地运行 INSERT INTO 函数。

Column 1   Column 2   Column 3 
10         Address    True 
10         City       False
10         State      True
20         Address    True
20         City       True
20         State      True
20         NEW        NEW*

Column 1   Column 2   Column 3
10         Address    True
10         City       False
10         State      True
10         NEW        NEW
20         Address    True
20         City       True
20         State      True
20         NEW        NEW

我用于插入的代码是:

insert into table-name(Column1, Column2, Column3)
  select 
     Column1, 'NEW', 'NEW*' 
  from 
     table-name 
  group by 
     Column1

我假设我需要使用一个IF/ELSE声明,但我在声明中遇到了问题IF。目前,我正在使用以下代码:

IF Column 2 like 'New' leave NULL
ELSE 
  insert into table-name(Column1, Column2, Column3)
     select 
         Column1, 'NEW', 'NEW*' 
     from table-name 
     group by Column1

我知道 IF 语句是错误的,但试图弄清楚如果它们已经被填充,如何使现有的行值保持不变。

4

5 回答 5

0

您可以使用 INSERT IGNORE INTO 或 INSERT ... ON DUPLICATE KEY UPDATE 语法

http://bogdan.org.ua/2007/10/18/mysql-insert-if-not-exists-syntax.html 和 dev.mysql.com

于 2013-03-20T15:01:21.560 回答
0

我认为您想要的是带有“ON DUPLICATE KEY”的“INSERT INTO”。

见: http ://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

于 2013-03-20T15:02:35.657 回答
0

对于 SQL Server,使用 CTE 定义要插入的数据集:

WITH NonDupes (<your fieldlist>)
AS
(SELECT <your fieldlist> FROM <your tables> WHERE <tablea>.<column> NOT IN (SELECT <column> FROM <tableb>))
INSERT INTO
<tableb>
VALUES(SELECT * FROM NonDupes)
于 2013-03-20T15:08:16.110 回答
0

使用 SQL Server,您可以执行 NOT EXISTS

insert into table-name(Column1, Column2, Column3)
  select 
     Column1, 'NEW', 'NEW*' 
  from 
     table-name 
     WHERE NOT EXISTS (SELECT 1 FROM table-name xref WHERE xref.Column1 = table-name.Column1 AND xref.Column2 = 'NEW')
  group by 
     Column1
于 2013-03-20T15:09:09.933 回答
0

您可以使用 Merge 语句仅插入不存在的行。作为额外的奖励,如果需要,您可以更新同一语句中的现有行。

http://msdn.microsoft.com/en-us/library/bb510625.aspx

于 2013-03-20T15:41:39.860 回答