0

これで検索を開始する方法さえわかりません。

私がやろうとしていることを説明しましょう:

変数と値のマッピング テーブルがあります。 複数の値を 1 つの変数に割り当てることができ、同じ値を多数の変数に割り当てることができます

ユーザーは変数/値を削除できます。ただし、この特定の値のみが割り当てられている変数がある場合、値を削除することはできません。そうしないと、変数は削除されずに残りますが、0 の値が割り当てられます。これは誤りです。

ここで、ユーザーが特定の変数から値を削除しようとした時点で、次のことを確認します。

選択された valueID に対して、valueID が 1 つしか割り当てられていない variableID があり、その valueID がユーザーが削除しようとしている場合。 もしそうなら、中止してください。それ以外の場合は続行します。

これは何らかの方法で可能ですか?

テーブル名:

Variable
Value
Variable_Value ( mapping table )

フィールド名 (すべてのテーブル):

Variable_ID
Value_ID

以下の例:

For example Variable_ID 5 only has Value_ID 10 assigned to it. 
If a user selects a Variable_ID, he sees all assigned Value_IDs 
and is able to select one and try to delete it. So, a user could click 
on Variable_ID 3 and try to delete Value_ID 10. That shouldn't 
be possible if that specific Value_ID is the only assigned 
value to any other Variable, because that would leave that 
variable with no Value_IDs.

4

3 に答える 3

1

要件を分解することで、必要なもののロジックは次のようになると思います。

  1. 最初にVariableId特定の s を取得しValueIdます。

    DECLARE @VALUE_ID INT
    SET @VALUE_ID = 10;
    
    SELECT DISTINCT VariableId
    FROM VARIABLE_VALUE
    WHERE ValueId = @VALUE_ID
    
  2. VariableIdこのクエリの後、その特定の値を持つすべての が得られます。次に、これらの sごとに、値の数を計算する必要があります。VariableIdCOUNT

    SELECT VariableId, COUNT(ValueId) as Values
    FROM VARIABLE_VALUE
    WHERE VariableId IN (--- The result of the query in step 1 ---)
    GROUP BY VariableId
    
  3. カウントが 1 を返したものが1 つでもある 場合は、削除を続行できません。VariableId

Ps。SQLが有効かどうかはわかりません。答えの背後にある一般的なアイデアを提示したかっただけです。

于 2012-11-05T13:21:23.147 に答える
0

これは次のことを行う必要があります。

DECLARE @Value INT -- the right datatype here
DECLARE @VariableId INT -- the right datatype here
SET @Value = 10
SET @VariableId = 1

;WITH CTE AS
(
    SELECT  *, COUNT(*) OVER() Total,
            COUNT(CASE WHEN Value = @Value THEN 1 END) OVER() TotalValue
    FROM Variable_Value
    WHERE VariableId = @VariableId
)
DELETE FROM CTE
WHERE Total = TotalValue
于 2012-11-05T12:42:42.430 に答える
0

OK、多分私は質問をよりよく理解しています。

この特定の値のみが割り当てられている変数がある場合は、ステートメントに注目してみましょう。

したがって、(1) この値を使用し、(2) それが唯一の値である、すべての変数のクエリが必要です。

SELECT AA.Variable_ID
FROM Variable_Value AA
  LEFT OUTER JOIN Variable_Value BB
    ON AA.Value_ID = ? AND AA.Variable_ID = BB.Variable_ID AND BB.Value_ID <> ?
GROUP BY AA.Variable_ID

これらは、削除できる変数です。

于 2012-11-05T14:33:46.100 に答える