从2个不同的表插入

时间:2011-09-16 09:52:43

标签: sql sql-server-2008 insert

我拥有的内容:我有3个表格CONTENT_MASTERAccount_MasterContent_LicensesContent_Licenses表用于存储不同帐户的每个内容的许可证。例如,我有一个名为myOldContent的内容,每个帐户都有以下许可证:

Table: Content_Licenses

CL_AccountID    NoOfLicences
8               99
241             70
240             30
186             30
99              30

我想要的是什么: 对于以下内容,我想为每个帐户提供相同数量的许可证:

Table: CONTENT_MASTER

CM_ID   CM_NAME
101    myNewContent1
102    myNewContent2
103    myNewContent3

我做了什么:我写了以下查询来执行此操作:

--Assign New components ID here and execute the query.
DECLARE @NewComponentID int

--Give license to new components
INSERT INTO CONTENT_LICENSES
                (CL_CM_ID
                ,CL_AccountID
                ,NoOfLicences)
            SELECT 
                @NewComponentID  --Want to fetch from CONTENT_MASTER table, instead of passing like this
                ,CL.CL_AccountID --Fetching from CONTENT_LICENSES table
                ,CL.NoOfLicences 
                FROM CONTENT_LICENSES CL 
                    INNER JOIN CONTENT_MASTER ON CM_ID = CL.CL_CM_ID
                WHERE CM_NAME = 'myOldContent'

问题 我需要执行此查询3次,以便为3个新组件提供许可证(即通过分配新组件的ID并执行它)。有没有其他方法(不使用游标)?

1 个答案:

答案 0 :(得分:1)

也许我仍然缺少一些东西,但到目前为止你似乎可以尝试这样的东西:

INSERT INTO CONTENT_LICENSES
    (CL_CM_ID
    ,CL_AccountID
    ,NoOfLicences)
SELECT 
    CM_NEW.CM_ID
    ,CL.CL_AccountID
    ,CL.NoOfLicences 
FROM CONTENT_LICENSES CL 
    INNER JOIN CONTENT_MASTER CM_OLD ON CM_OLD.CM_ID = CL.CL_CM_ID
    CROSS JOIN CONTENT_MASTER CM_NEW
WHERE CM_OLD.CM_NAME = 'myOldContent'
  AND CM_NEW.CM_NAME IN 
       ('myNewContent1'
       ,'myNewContent2'
       ,'myNewContent3')