0

https://stackoverflow.com/a/11177086/1947965

上記の正解リンクから、別の質問をフォローアップしたいと思います。私がやりたいのは、このフィールドのセットが空のときにフィールドのセットを更新することだけです。それ以外の場合は、単一の列だけでなく、別のフィールドのセットに更新します。別の状況を次に示します。

1.)フィールドsubjectColumnA, timeColumnA, dataColumnAを更新する場合。NULL

2.)subjectColumnA, timeColumnA, dataColumnANot NULLANDの場合はフィールドsubjectColumnB, timeColumnB, dataColumnBNULL更新しますsubjectColumnB, timeColumnB, dataColumnB

等々。. .

@ravinderのクエリから、このシナリオを持っていることを尋ねたい:これがテーブルの内容であるとしましょう

+------+------+------+------+------+------+------+------+------+------+
| id   | AAA1 | BBB1 | CCC1 | AAA2 | BBB2 | CCC2 | AAA3 | BBB3 | CCC3 |
+------+------+------+------+------+------+------+------+------+------+
|    1 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
+------+------+------+------+------+------+------+------+------+------+

上記の条件から、「AAA1、BBB1、および CCC1」と言及しNULLたので、この列が更新されます。そして結果はこのようになります。

+------+------+------+------+------+------+------+------+------+------+
| id   | AAA1 | BBB1 | CCC1 | AAA2 | BBB2 | CCC2 | AAA3 | BBB3 | CCC3 |
+------+------+------+------+------+------+------+------+------+------+
|    1 |    2 |    2 |    2 | NULL | NULL | NULL | NULL | NULL | NULL |
+------+------+------+------+------+------+------+------+------+------+

別の例として、'AAA1, BBB1, CCC1' が 'NOT NULL' の場合、'AAA2, BBB2, and CCC2' が更新され、結果は次のようになります。

+------+------+------+------+------+------+------+------+------+------+
| id   | AAA1 | BBB1 | CCC1 | AAA2 | BBB2 | CCC2 | AAA3 | BBB3 | CCC3 |
+------+------+------+------+------+------+------+------+------+------+
|    1 |    3 |    3 |    3 | NULL | NULL | NULL | NULL | NULL | NULL |
+------+------+------+------+------+------+------+------+------+------+

出来ますか??私が他の質問と回答から読んだことから、 CASE と If を使用すると、2つの引数のみが使用されます。このようなクエリを試しましたが、失敗します。

UPDATE table SET
    AAA3 = IF( AAA2 IS NOT NULL, 2, AAA3 ) AND BBB3 = IF( BBB2 IS NOT NULL, 2, BBB3 ),
    AAA2 = IF( AAA1 IS NOT NULL, 2, AAA2 ) AND BBB2 = IF( BBB1 IS NOT NULL, 2, BBB2 ),
    AAA1 = IF( AAA1 IS NULL, 1, AAA1 ) AND BBB1 = IF( AAA1 IS NULL, 1, BBB1 );
4

1 に答える 1

1

サンプルデータと必要な出力がなければこれに答えるのは本当に難しいですが、提供したリンクと上記の疑似構文を使用すると、まったく同じ方法でそれを行うことができるはずです:

UPDATE TableName SET 
subjectColumnA = ( case when subjectColumnA is null 
                        AND timeColumnA is null 
                        AND dataColumnA is null 
                    then ? 
                    else subjectColumnA end ),
timeColumnA = ( case when subjectColumnA is null 
                        AND timeColumnA is null AND 
                        dataColumnA is null 
                     then ? 
                     else timeColumnA end ),
dataColumnA = ( case when subjectColumnA is null AND 
                        timeColumnA is null AND 
                        dataColumnA is null 
                     then ? 
                     else dataColumnA end ),
subjectColumnB = ( case when subjectColumnA is not null AND 
                        timeColumnA is not null AND 
                        dataColumnA is not null AND 
                        subjectColumnB is null AND 
                        timeColumnB is null AND 
                        dataColumnB is null 
                    then ? 
                    else subjectColumnB end ),
timeColumnB = ( case when subjectColumnA is not null AND 
                        timeColumnA is not null AND 
                        dataColumnA is not null AND 
                        subjectColumnB is null AND 
                        timeColumnB is null AND 
                        dataColumnB is null 
                    then ? 
                    else timeColumnB end ),
dataColumnB = ( case when subjectColumnA is not null AND 
                        timeColumnA is not null AND 
                        dataColumnA is not null AND 
                        subjectColumnB is null AND 
                        timeColumnB is null AND dataColumnB is null 
                    then ?
                    else dataColumnB end )

本当に、基準を追加するだけで、それが満たされていない場合は、else で更新して元に戻します。

- 編集

上記のクエリを使用すると、引き続き CASE を使用できます -- IIF と同じように機能します。

UPDATE table SET
    AAA3 = CASE WHEN AAA2 IS NOT NULL THEN 2 ELSE AAA3 END,
    BBB3 = CASE WHEN BBB2 IS NOT NULL THEN 2 ELSE BBB3 END,
    AAA2 = CASE WHEN AAA1 IS NOT NULL THEN 2 ELSE AAA2 END,
    BBB2 = CASE WHEN BBB1 IS NOT NULL THEN 2 ELSE BBB2 END,
    ...

幸運を。

于 2013-01-29T04:57:44.263 に答える