0

次のクエリで「IF」の近くに構文エラーが発生します。

myDataBase.execSQL("IF EXISTS (SELECT * FROM ANSWERS WHERE QUESTION_ID=" + id +" AND PLAYER ='" + player + "')" +
                "UPDATE ANSWERS SET "+field+"=1"
                + " WHERE QUESTION_ID=" + id + " AND LEVEL =" + level +" AND PLAYER='" + player + "' ELSE "
                + "INSERT INTO ANSWERS (level, player, question_id, "+field+") VALUES (level, player, id, 1)");

私がどこで間違っているのか分かりません..誰かがそれを見ますか?

 near "IF": syntax error: IF EXISTS (SELECT * FROM ANSWERS WHERE QUESTION_ID=6 AND PLAYER ='nob')UPDATE ANSWERS SET showhint1=1 WHERE QUESTION_ID=6 AND LEVEL =1 AND PLAYER='nob' ELSE INSERT INTO ANSWERS (level, player, question_id, showhint1) VALUES (level, player, id, 1)
4

3 に答える 3

1

編集: 元の回答に対するこのコメントが気に入っています: sackoverflow.com/questions/418898/… – zapl 7 分前. 私はあなたがそれを行うことができるとは知りませんでした。こう見るとなかなか有能ですね……。

私はこれを素早くやった。うまくいけば、アイデアが得られます...したがって、これらの変数やものは非SQLコードになります。可能であれば、ストアドプロシージャなどを使用することをお勧めします....またはすべてのセクションを完全に分離します(存在するかどうか、それに基づいてこのSQLを実行するか、このSQLを実行しないかを確認します)。

update ステートメントだけで....変数がテーブルに存在しない場合、何も更新されません。そして挿入ステートメントだけで...変数がテーブルに存在する場合、何も挿入されません。これらの 2 つのステートメントのほかに、回答に何かが存在するかどうかを実際に確認するために、if や何かが存在する必要はありません。

create table #answers (question_id int, player int, level int, other_field int) 

insert into #answers values (1,1,1,1) 
insert into #answers values (2,1,1,1)  


declare @question_id int
declare @player int
declare @level int
declare @other_field int

set @question_id=1
set @player=1 
set @level=1
set @other_field=1

-- if it exists already 
update a
    set     other_field=@other_field  
    from    #answers as a
    where   QUESTION_ID=@question_id and 
            PLAYER=@player and 
            other_field<>@other_field 



set @question_id=4
set @player=4
set @level=1
set @other_field=1


-- if it doesn't exist
insert into #answers (question_id, player, level, other_field)
        select  x.QUESTION_ID, x.player, @level, @other_field
        from    #answers a 
                right outer join 
                    (select @question_id as QUESTION_ID,
                            @player as player) as x 
                    on x.QUESTION_ID=a.QUESTION_ID and 
                        x.player=a.player
        where   a.player is null and a.question_id is null 

またはこれが存在しない場合(より面倒ですが短い)

-- if it doesn't exist
insert into #answers (question_id, player, level, other_field)
        select  distinct  @QUESTION_ID, @player, @level, @other_field  
        from    #answers 
        where   not exists (select 1 from #answers where 
                                QUESTION_ID=@question_id and 
                                    PLAYER=@player )
于 2012-11-16T19:53:44.247 に答える
1

この質問への回答を参照してください。

select exists(
    select * from answers ...
);
于 2012-11-16T18:56:24.933 に答える
0

If existsは、SQL 更新ステートメントで使用する有効なキーワードではありません。

于 2012-11-16T19:23:52.950 に答える