2014-11-04 83 views
0

我在SQL Server数据库中有两个表,其中一个包含已发布的字母和一个以电子方式发送的文档。从一列中唯一的两个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确实出现在DocumentTransmission - 我似乎无法到弄清楚如何快速做到这一点 - 我的例程会让数据库管理员哭,因为它太慢了 - 你会如何推荐这样做。

+0

听起来像一个左连接到我 – jbutler483 2014-11-04 16:29:55

+0

[见这里](http://2.bp.blogspot.com/-sPPmxWgcl_I/UmrMDwV5EhI/AAAAAAAAAHU/fFApXiKcHwg/s1600/sqljoins.jpg) – jbutler483 2014-11-04 16:36:03

+1

你的意思是你想做这样的事情'SELECT * FROM DocumentTransmission UNION SELECT * FROM DocumentPrint WHERE Filename NOT IN(SELECT FileName FROM DocumentTransmission)'?如果是这样,由于您正在比较两个非常长的“VARCHAR”列,因此很难加快速度。 – ForguesR 2014-11-04 16:39:02

回答

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列,如果您的表中有很多行,这将会很慢。

相关问题