从两个在一列上唯一的SQL Server表中添加记录

时间:2014-11-04 16:27:18

标签: sql-server-2008

我在SQL Server数据库中有两个表,一个包含已发布的字母和一个以电子方式发送的文档。

CREATE TABLE [dbo].[DocumentTransmission]
(
    [PatientNumber] [varchar](50) NULL,
    [Filename] [varchar](512) NOT NULL,
    [TransmittedDateTime] [datetime2](3) NULL,
    [GPCode] [varchar](50) NULL,
    [PracticeCode] [varchar](50) NULL,
    [MessageSource] [varchar](50) NULL,
    [Status] [varchar](50) NULL,
    [EmailAddress] [varchar](64) NULL,
    [DateTimeAdded] [datetime2](3) NULL
) ON [PRIMARY]

另一个表名为DocumentPrint

我需要能够从DocumentTransmission中选择记录,并且只有DocumentPrint Filename中<{1}} 出现在DocumentTransmission中的记录 - 而且我似乎无法弄清楚如何快速做到这一点 - 我的例行工作会让DBA哭泣,因为它太慢了 - 你会怎么推荐这样做。

1 个答案:

答案 0 :(得分:1)

SQL中没有添加记录。但是,您可以合并两个(或更多)SELECT个结果以及UNION。类似的东西:

SELECT * FROM DocumentTransmission UNION SELECT * FROM DocumentPrint

由于您还想从第二个查询中排除行,您必须添加条件:

SELECT * FROM DocumentTransmission UNION SELECT * FROM DocumentPrint WHERE Filename NOT IN (SELECT FileName FROM DocumentTransmission)

但是不要指望这个查询非常快:你要比较两个很长的VARCHAR列,如果你的表中有很多行,这将会很慢。