【问题标题】:Associate Document with all Candidates in Candidate_Document table将文档与 Candidate_Document 表中的所有候选人关联
【发布时间】:2014-11-12 04:36:32
【问题描述】:
CREATE TABLE [CandidateDocsAssociation](
[Row_ID] [bigint] IDENTITY(1,1) NOT NULL,
[Doc_ID] [bigint] NOT NULL,
[Candidate_ID] [bigint] NOT NULL,
) ON [PRIMARY]
GO

我有上面的表结构来存储文档和候选人之间的关联。 Row_ID 是自动生成的主键。 Doc_ID 是引用文档表的外键。 Candidate_ID 也是引用 Candidates 表的外键。

一个候选者可以关联多个文档,一个文档可以关联多个候选者。

如果 DOC_ID 为 2 的 Candidate_ID 行不存在,我想要实现的是为所有候选人 (DISTINCT) 插入一个默认的公共文档 (Doc_ID)。

我没有让下面的代码工作

  WHILE EXISTS (SELECT DISTINCT Candidate_ID from CandidateDocsAssociation
      WHERE Doc_ID <> (SELECT   Doc_ID FROM Doc_Table WHERE Doc_Name = N'Default'))
      BEGIN
      INSERT CandidateDocsAssociation (Doc_ID, Candidate_ID) VALUES  ((SELECT Doc_ID FROM Doc_Table WHERE Doc_Name = N'Default'),Candidate_ID)
      END
      GO

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    忘记while循环吧,SQL是关于集合操作的,所以你必须调整你的思维来适应它。您需要的是一组没有关联 id=2 的文档的候选人。对于每个这样的候选人,您需要创建与默认文档的关联。让我们试着把它写下来:

    INSERT INTO [CandidateDocsAssociation] VALUES([Candidate_ID], [Doc_ID])
    SELECT [Candidate_ID], 2
    FROM [Candidate] c  -- I assume you have table of all candidates
    WHERE NOT EXISTS (
      SELECT * FROM [CandidateDocsAssociation] a
      WHERE a.[Candidate_ID] = c.[Candidate_ID] AND a.[Doc_ID] = 2
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 2018-04-14
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      相关资源
      最近更新 更多