2014-11-04 85 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列,如果您的表中有很多行,這將會很慢。

相關問題