如果值不存在,但仅针对某些条件,如何将其插入表中?(MS SQL Server)

如果值不存在,但仅针对某些条件,如何将其插入表中?(MS SQL Server),sql,sql-server,select,insert,Sql,Sql Server,Select,Insert,我对SQL非常陌生,但需要编写一个查询来执行以下操作。 使用MS SQL Server 2005 Profile DefinitioninProfile Definition ------ ------------------- ---------- ProfileID DefinitionID DefinitionID P

我对SQL非常陌生,但需要编写一个查询来执行以下操作。 使用MS SQL Server 2005

Profile DefinitioninProfile Definition ------ ------------------- ---------- ProfileID DefinitionID DefinitionID ProfileType ProfileID DefinitionType ProfileName 在定义表中,定义类型可以是TypeA、TypeB。。。。。TypeZ。 我想确保对于某个配置文件类型,ProfileTypeA 该定义包含所有类型,TypeA->TypeZ

但是有些类型已经存在于表中,我不想有重复的

So its something like SELECT ProfileID from Profile where ProfileType = ProfileTypeA FOR EACH ProfileID IF NOT EXISTS IN Defintion TypeA INSERT TypeA into Definition INSERT ProfileID, DefinitionID into DefinitionInProfile ...repeat for TypeB, TypeC... END 我需要获取ProfileType=ProfileTypeA的所有实例

然后获取第一个Profile.profileID

然后检查DefinitioninProfile表以获取 profileID=Profile.profileID

然后,对于所有这些定义ID,检查是否有名为“TypeA”的定义类型 如果没有,请插入它,如果有,请忽略它。 然后对“类型B”执行相同的操作,对类型C重复此操作。。typeZ

返回步骤2,获取下一个Profile.ProfileID,并对该Profile ID重复3和4次。

尝试以下操作:

INSERT DefinitionInProfile 
    (ProfileID, DefinitionID)
SELECT
    P.ProfileID, D.DefinitionID
FROM
    --All permutations of P and D
    Profile P
    CROSS JOIN
    Definition D
WHERE
    --Edit (added 2 rows)
    --But filter and lookup type -> id
    P.ProfileType = ProfileTypeA
    AND
    --End edit
    --But not where the defid is already there for that profileid
    NOT EXISTS (SELECT * --or 1!!
        FROM
            DefinitionInProfile DP
        WHERE
            DP.ProfileID = P.ProfileID AND
            DP.DefinitionID= D.DefinitionID)

我的理解是,您希望拥有所有配置文件、定义和定义配置文件的组合。在二读时,您只需要profiletypea。你有错误吗?OrI没有出错。我已经编辑了我的问题,希望能让它更清楚。它没有插入缺少的'typeA'和'typeB'。。。进入定义表?您需要一个定义源来给出定义范围。如果手动将deftypea添加到deftypez,则交叉联接可以工作。在每个profiletype的定义中添加deftypea到deftypez是没有意义的。。。这是定义的重点。处理排列的配置文件我可以看到你在说什么,但它是一个数据库,我被要求修改,我不能改变结构。