我目前有一个有几千个条目的表。我找到了一种方法来为系统中的所有条目插入新的数据行(参见下面的示例),但不幸的是,我发现有些条目已经存在其中的值。我试图弄清楚如何根据行是否已存在来有选择地运行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语句是错误的,但是如果已经填充了现有的行值,那么试图弄清楚该怎么办。
答案 0 :(得分: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
答案 1 :(得分:0)
我认为你想要的是一个带有“ON DUPLICATE KEY”的“INSERT INTO”。
请参阅: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
答案 2 :(得分: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)
答案 3 :(得分: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
答案 4 :(得分:0)
您可以使用Merge语句仅插入不存在的行。作为额外的奖励,如果您需要,可以更新同一语句中的现有行。