3

私は心理学のクラス用のデータベースを作成しており、パーソナリティ プロファイルを採点しています。2 つのテスト項目を比較し、条件に一致する場合は別のテーブルにコピーする必要があります。

例(疑似コードは\の間にあります)Sqlite3

INSERT INTO Scale
SELECT* FROM Questions
WHERE \\if Question 1 IS 'TRUE' AND Question 3 IS 'FALSE' THEN Copy this Question
and its response into the Scale table\\;

このように機能する他の約100の質問があります。サンプル形式は次のようになります。

IF FirstQuestion IS value AND SecondQuestion IS value THEN 
Copy both questions into the Scale TABLE.

---------- 最初の応答後に編集されました! 編集が続きます-------------

ここに私の TestItems テーブルがあります:

ItemID |      ItemQuestion       | ItemResponse
```````````````````````````````````````````````````
   1   |    Is the sky blue?     |    TRUE
   2   |    Are you a person?    |    TRUE
   3   |    2 Plus 2 Equals Five |    FALSE

私がしたいこと: 質問 1 が TRUE で、質問 3 が FALSE の場合、両方の質問をテーブル 'Scale' (TestItems のように設定されています) に挿入します。私はこれを試しました:

INSERT INTO Scale
SELECT * FROM TestItems
WHERE ((ItemID=1) AND (ItemResponse='TRUE')) 
AND ((ItemID=3) AND (ItemResponse='FALSE'));

ただし、上記の INSERT はどちらもコピーしません。結果の「スケール」テーブルは次のようになります。

ItemID |      ItemQuestion       | ItemResponse
```````````````````````````````````````````````````
   1   |    Is the sky blue?     |    TRUE
   3   |    2 Plus 2 Equals Five |    FALSE
4

1 に答える 1

0

クエリに問題はありません。あなたはただそこにいます:

INSERT INTO Scale
SELECT * FROM Questions
WHERE `Question 1` = 1 AND `Question 3` = 0;

ここで 1 と 0 は値です (最初のケースでは true と false)。まず、テーブルにQuestion 1とフィールドがあることを確認する必要があります。次に、テーブルの列数とデータ型がテーブルと一致する必要があります。それ以外の場合は、クエリでフィールドを選択的に選択する必要があります。Question 3QuestionsScaleQuestionsSELECT

編集:あなたの編集に対応するには、エレガントな解決策がありません。あなたはこれを行うことができます:

INSERT INTO Scale
SELECT * FROM TestItems WHERE ItemID = 1 AND ItemResponse = 'TRUE'
UNION
SELECT * FROM TestItems WHERE ItemID = 3 AND ItemResponse = 'FALSE'
WHERE (SELECT COUNT(*) FROM (
                             SELECT 1 FROM TestItems WHERE ItemID = 1 AND ItemResponse = 'TRUE'
                             UNION
                             SELECT * FROM TestItems WHERE ItemID = 3 AND ItemResponse = 'FALSE'
                            ) AS t) >= 2

ItemID同時に 1 と 3 の両方を指定できないため、挿入は機能しませんでした。私のソリューションは、必要なレコードをテーブルに挿入しScaleますが、カウントをチェックして両方のレコードが存在することを確認します。さらに、これはわずかに効率的である可能性があるため、以下のようにすることができます(すべきです) (上記の SQL は、使用されているロジックを明確に示すためのものでした)。

INSERT INTO Scale
SELECT * FROM TestItems WHERE ItemID = 1 AND ItemResponse = 'TRUE'
UNION
SELECT * FROM TestItems WHERE ItemID = 3 AND ItemResponse = 'FALSE'
WHERE (
       SELECT COUNT(*) 
       FROM   TestItems 
       WHERE  ItemID = 1 AND ItemResponse = 'TRUE' 
           OR ItemID = 3 AND ItemResponse = 'FALSE'
      ) >= 2
于 2012-10-27T07:11:33.473 に答える