2009-05-27 6 views
0

助けてください。同じレコードがある場合は数値を増やし、そうしたくない場合は0を挿入する

select * from hoge where id=xxx; 

データがあれば、私はそれはそれを行うために行うが、私は、このステップを実行するのに、場合は、プログラムであり、そして= 0ホーヘセットデータを挿入することは面倒で更新ホーヘセットデータの場合は=データ+1、結果は0行です。

この手順をSQLの吹き飛ばしで実現することはできませんか? hoge select id、data + 1をhogeのデータとして置き換えます(id = xの場合)。 このSQLの場合、NULLの場合にデータが入力されなかったため、結果を使用できませんでした。

if文では、SQLで複数形か櫛形かどうかはまったくありませんか? もっと簡単な方法があれば教えてください。

お気軽にお寄せいただきありがとうございます。

+0

あなたが何を求めているのかわかりません。私の最善の推測:特定のIDを持つ行があるかどうかをチェックしたい場合は、データフィールドをインクリメントし、そうでない場合は0行を作成しますか? – Eric

+0

質問を母国語で書いて、それを英語のツールに通して英語に翻訳することをお勧めしますか?私は本当にあなたが求めているものを解析することはできません。しかし、誰かがそうすることができます。 –

+0

@Vinko - この質問は、Googleの言語ツールを介して実行されているかのように表示されます。彼らは完璧ではありません。 – ceejayoz

答えて

0

行がまだ存在しない場合は作成する方法、存在する場合はその中のフィールドの1つを更新する方法を尋ねているようです。

UPSERT文のいくつかのフォームを提供していないDBMSのための」)正常なアプローチがある:

insert into TBL(keycol,countcol) values (key,-1) 
update TBL set countcol = countcol + 1 where keycol = key 

あなたが最初の行にすべてのエラーを無視する必要があります(行がすでに存在する場合に起こるべきです)。次に、2番目のステートメントはそれを更新します。

最初にあなたがそれを行うときに「物」を追加しているので、最初は0のエントリを挿入するのは珍しいことです。その場合、インサートは値を-1ではなく0に設定します。

3

質問を正しく理解していれば(私はOPがネイティブの英語話者ではないと思う)、ON DUPLICATE KEYを使ってMySQLでこれを行うことができます。

INSERT INTO table 
    (column1, column2, ...) 
VALUES 
    ('initial value for column1', 'initial value for column2', ...) 
ON DUPLICATE KEY UPDATE 
    column1 = column1 + 1, column2 = 'new value for column2'; 
関連する問題