【问题标题】:Preventing Duplicate Values in a SQL table防止 SQL 表中的重复值
【发布时间】: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 sql-server


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多