Im très nouveau à SQL mais besoin d'écrire une requête pour faire ce qui suit. En utilisant MS SQL Server 2005.
Définition du profil Définition du profil ------ ------------------- ---------- ProfileID DefinitionID DefinitionID ProfileType ProfileID DefinitionType Nom de profil
Dans la table de définition, le type de définition peut être TypeA, TypeB ….. TypeZ. Je veux m'assurer que pour un certain type de profil, ProfileTypeA la définition a tous les types, TypeA -> TypeZ.
Mais certains types existent déjà dans la table, et je ne veux pas avoir de duplicates.
Donc c'est quelque chose comme SELECT ProfileID du profil où ProfileType = ProfileTypeA POUR CHAQUE ProfileID SI N'EXISTE PAS EN Définition TypeA INSÉRER TypeA dans la définition INSERT ProfileID, DefinitionID dans DefinitionInProfile ... répétez pour TypeB, TypeC ... FIN
Je dois get toutes les instances où ProfileType = ProfileTypeA
Ensuite, obtenez le premier Profile.profileID
Ensuite, vérifiez la table DefinitioninProfile pour get une list des DefinitionID où le profileID = Profile.ProfileID
Ensuite, pour tous ces ID de définition, vérifiez s'il existe un type de définition appelé 'TypeA' si vous ne l'insérez pas, s'il est ignoré. Faites de même pour 'TypeB', répétez pour typec, .. typeZ
Revenez à l'étape 2 et obtenez le Profile.ProfileID suivant et répétez les étapes 3 et 4 pour cet ID de profil.
Essaye ça:
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)