2013-04-12 66 views
0

我有三個表格:LitHold,LitHoldDetails和EmailTemplate。定義如下。查詢我要查找不匹配的3個表格

CREATE TABLE [dbo].[LitHold](
[LitholdID] [int] IDENTITY(1,1) NOT NULL, 
[LitHoldStatusID] [tinyint] NOT NULL, 
[EmailReminderID] [tinyint] NULL, 
[ApprovedDate] [datetime] NULL, 
[TerminatedDate] [datetime] NULL, 
CONSTRAINT [PK_Lithold] PRIMARY KEY CLUSTERED 
(
[LitholdID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 


CREATE TABLE [dbo].[LitHoldDetails](
[LitHoldDetailsID] [int] IDENTITY(1,1) NOT NULL, 
[LitholdID] [int] NOT NULL, 
[VersionID] [int] NOT NULL, 
[Description] [varchar](300) NULL, 
[ResAttorneyID] [varchar](10) NOT NULL, 
[Comments] [varchar](1000) NULL, 
[HoldStartDate] [datetime] NULL, 
[HoldEndDate] [datetime] NULL, 
[CreatedDate] [datetime] NOT NULL, 
[CreatedByLogin] [varchar](10) NULL, 
CONSTRAINT [PK_LitholdDetails] PRIMARY KEY CLUSTERED 
(
[LitHoldDetailsID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 


CREATE TABLE [dbo].[EmailTemplate](
[TemplateID] [int] IDENTITY(1,1) NOT NULL, 
[LitHoldDetailsID] [int] NOT NULL, 
[From] [varchar](50) NULL, 
[To] [varchar](2000) NULL, 
[CC] [varchar](500) NULL, 
[BCC] [varchar](500) NULL, 
[Subject] [nvarchar](200) NULL, 
[MessageBody] [nvarchar](max) NULL, 
[SendDate] [datetime] NULL, 
[IsDefault] [bit] NOT NULL, 
CONSTRAINT [PK_EmailTemplate] PRIMARY KEY CLUSTERED 
(
[TemplateID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

對於每個LitHold,可以有多個LitHoldDetails。對於每個LitHoldDetail,應該有一個EmailTemplate。我最近發現一些LitHoldDetails沒有EmailTemplates。我們仍在開發這個項目,所以這不是什麼大問題。但是,我們想要將EmailTemplate數據存入數據庫。情況是,對於每個LitHold,至少有一個具有EmailTemplate的LitHoldDetail。我想爲所有的LitHoldDetails複製這個EmailTemplate數據:a)具有相同的LitHoldID; b)沒有EmailTemplate。一個我已經試過的方法是:

insert into EmailTemplate 
(LitHoldDetailsID, [From], [To], CC, BCC, Subject, MessageBody, SendDate, IsDefault) 
(select (select top 1 LitHoldDetailsID from LitHoldDetails where LitholdID = d.LitholdID and LitHoldDetailsID <> e.LitHoldDetailsID), [To], CC, BCC, Subject, MessageBody, SendDate, IsDefault from 
EmailTemplate e inner join LitHoldDetails d on e.LitHoldDetailsID = d.LitHoldDetailsID) 

但是這讓我多行一些LitHoldDetails,用不同的emailTemplate數據,另一些行,其中LitHoldDetails爲NULL。我怎樣才能做到這一點?我使用的是SQL Server 2008的

回答

1

嘗試插入這樣的:

SELECT lhd.LitHoldDetailsID, CloneEmailTemplate.[From], ... 
FROM LitHoldDetails lhd 
CROSS APPLY (SELECT TOP 1 et.* 
      FROM EmailTemplate et 
      JOIN LitHoldDetails lhd2 ON lhd2.LitHoldDetailsID = et.LitHoldDetailsID 
      WHERE lhd2.LitHoldID = lhd.LitHoldID 
      ) AS CloneEmailTemplate 
WHERE NOT EXISTS (SELECT 1 
        FROM EmailTemplate et2 
        WHERE et2.LitHoldDetailsID = lhd.LitHoldDetailsID 
       ) 
+0

這正是我一直在尋找,太感謝你了!週末愉快! – Melanie