2

私はSQLを初めて使用しますが、次のことを行うにはクエリを作成する必要があります。MS SQL Server 2005 を使用。

プロファイル定義inプロファイル定義
------ ---------------------- ----------      
プロファイル ID 定義 ID 定義 ID
ProfileType ProfileID 定義タイプ
プロファイル名                                          

定義テーブルでは、定義 Type は TypeA、TypeB ..... TypeZ のいずれかになります。特定のプロファイル タイプ ProfileTypeA について、定義に TypeA -> TypeZ のすべてのタイプが含まれていることを確認したいと考えています。

しかし、いくつかのタイプはすでにテーブルに存在しており、重複したくありません。

だからそのようなもの
ProfileType = ProfileTypeA である Profile から ProfileID を選択します。
プロファイル ID ごとに
   定義タイプ A に存在しない場合
   TypeA を定義に挿入
   ProfileID、DefinitionID を DefinitionInProfile に挿入

   ...TypeB、TypeC について繰り返します...
終わり
  1. ProfileType = ProfileTypeA であるすべてのインスタンスを取得する必要があります

  2. 次に、最初の Profile.profileID を取得します

  3. 次に、DefinitioninProfile テーブルをチェックして、profileID = Profile.ProfileID である DefinitionID のリストを取得します。

  4. 次に、これらすべての定義 ID について、'TypeA' と呼ばれる definitionType があるかどうかを確認します。存在しない場合は挿入し、存在する場合は無視します。次に、'TypeB' についても同じことを行い、typec についても繰り返します。.. typeZ

手順 2 に戻り、次の Profile.ProfileID を取得し、そのプロファイル ID に対して 3 と 4 を繰り返します。

4

1 に答える 1

1

これを試して:

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)
于 2009-02-04T10:19:49.330 に答える