Как вставить в таблицу, если значение не существует, но только для определенных критериев? (MS SQL Server) - PullRequest
2 голосов
/ 04 февраля 2009

Я очень плохо знаком с SQL, но должен написать запрос, чтобы сделать следующее. Использование MS SQL Server 2005.


Profile                  DefinitioninProfile         Definition
------                   -------------------         ----------      
ProfileID                DefinitionID                DefinitionID
ProfileType              ProfileID                   DefinitionType
ProfileName                                          

В таблице определения тип определения может быть ТипА, ТипВ ..... ТипЗ. Я хочу убедиться, что для определенного типа профиля, 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
  1. Мне нужно получить все экземпляры, где ProfileType = ProfileTypeA

  2. Тогда получите первый Profile.profileID

  3. Затем проверьте таблицу DefinitioninProfile, чтобы получить список DefinitionID, где profileID = Profile.ProfileID

  4. Затем для всех этих идентификаторов определений проверьте, существует ли DefinitionType с именем «TypeA». если не вставить его, если есть игнорировать его. Затем сделайте то же самое для 'TypeB', повторите для typec, .. typeZ

Вернитесь к шагу 2 и получите следующий Profile.ProfileID и повторите 3 и 4 для этого идентификатора профиля.

1 Ответ

1 голос
/ 04 февраля 2009

Попробуйте это:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...