我在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哭泣,因为它太慢了 - 你会怎么推荐这样做。
答案 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
列,如果你的表中有很多行,这将会很慢。