如果值不存在,但仅针对某些条件,如何将其插入表中?(MS SQL Server)
我对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次。尝试以下操作:如果值不存在,但仅针对某些条件,如何将其插入表中?(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
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是没有意义的。。。这是定义的重点。处理排列的配置文件我可以看到你在说什么,但它是一个数据库,我被要求修改,我不能改变结构。