防止 SQL 表中的重复值

Posted

技术标签:

【中文标题】防止 SQL 表中的重复值【英文标题】:Preventing Duplicate Values in a SQL table 【发布时间】:2015-08-10 16:02:37 【问题描述】:

我很难防止重复值插入到 Microsoft SQL Server 中的特定表中。我有一个临时表,我将数据导入每个月,然后从该表中将所有电话号码插入电话号码表中。电话号码表是一个包含 1 列的简单表,该列被设置为主键。

我第一次将临时表中的数据插入到电话表中时,一切都很好,因为我可以在插入查询中使用distinct 来确保没有重复进入电话号码表.当我想再添加几个月的数据并且我必须将新月份数据中的内容与电话号码表中的内容进行比较时,就会出现问题。

这是我目前所在的位置,但此查询返回 The multi-part identifier "tbl_PhoneNumber.MTN" could not be bound. 错误

INSERT INTO tbl_PhoneNumber( MTN )
SELECT distinct [dbo].[tbl_Raw_Data].[Wireless Number]
FROM [dbo].[tbl_Raw_Data]

Where  tbl_PhoneNumber.[MTN] <>[tbl_Raw_Data].[Wireless Number]

希望我没有让这听起来更令人困惑。比较两个表并仅插入唯一值的最佳方法是什么?

【问题讨论】:

SQL Server Duplicate Checking的可能重复 【参考方案1】:

只要确保您的表中有一个名为 MTN 的列,它应该可以正常工作。

INSERT INTO tbl_PhoneNumber( MTN )
SELECT distinct [Wireless Number]
FROM [dbo].[tbl_Raw_Data]
Where NOT EXISTS(SELECT 1
                 FROM tbl_PhoneNumber
                 WHERE tbl_PhoneNumber.[MTN] = [tbl_Raw_Data].[Wireless Number])

【讨论】:

这很有效,我会尽快接受它作为答案。我确实有一个问题。 select 之后的 1 的用途是什么?我之前尝试过类似的方法,但没有包含 1。 实际上它不必是1 它可以是任何东西,即使SELECT NULL 也可以正常工作,实际存在的运算符只是寻找任何东西,如果从子查询返回任何东西where 条件的计算结果为真,对于外部查询中的特定行,整个表达式的计算结果为真。【参考方案2】:

这是另一种方式。

insert into tbl_PhoneNumber (mtn)
select distinct Wireless_Number 
from tbl_Raw_data
except
select mtn
from tbl_PhoneNumber

【讨论】:

以上是关于防止 SQL 表中的重复值的主要内容,如果未能解决你的问题,请参考以下文章

如何防止将重复数据插入到值为多个的 SQL Server 表中

sql SQL查询使用单个值查找表中的重复项。

数据库表中不建索引,在插入数据时,通过sql语句防止重复添加

如何从 SQL Server 中的表中删除重复行 [重复]

SQL 防止重复插入

MySQL 处理重复数据:防止表中出现重复数据统计过滤删除重复数据