2012-01-24 16 views
1

私は非常に奇妙なクエリを書くしようとしていると私は deleted_1deleted_2私は更新したいので、このように私はifステートメントで問題が発生しているbフィールドをチェックしない場合は、それを更新し、それが今bフィールド空のアップデートだ場合、私は多分わからない値が存在しない場合、MySQLの更新

Update `messages` 
    if(`deleted_1` == null) SET `deleted_1` = 1 
    else 
    if(`deleted_2` == null) SET `deleted_2 = 1 
    ---and here goes some simple WHERE statements 

が、これは私がaフィールドが空であるかどうかを確認したいのでbasiclyは動作しません:それはあるべきだと思いますよりシンプルにやっていくことができます。私はここでかなり失われています:)

+0

値が存在しない場合はMySQLの更新、値が存在しない場合はMySQLのINSERT? – Sarfraz

+0

いいえ更新する必要はありません – Linas

答えて

3
UPDATE MyTable 
SET deleted_2 = CASE WHEN ISNULL(deleted_1, '') == '' OR ISNULL(deleted_2, '') != '' THEN deleted_2 ELSE 1 END, 
    deleted_1 = CASE WHEN ISNULL(deleted_1, '') != '' THEN deleted_1 ELSE 1 END 

これは言っている:私はあなたの問題は、そのnullである

deleted_1: will be update if (deleted_1 == null) 
deleted_2: will be updated if (deleted_1 != null && deleted_2 == null), 
      This is to match your if else condition 
+0

Hmmクエリはエラーなしで実行されますが、フィールドは更新されません。両方のフィールドが空でも1つしか空でなくても – Linas

+0

@Linas空を( '')値がNULLの場合のみ動作します –

1

考える= nullを!。式deleted_2 == nullは真とは決して解決しません。まず第一に、単一=は、(少なくとも、MySQLでの)倍ではない、第二に、これらを試してみてください。

mysql> select false = null; 
+--------------+ 
| false = null | 
+--------------+ 
|   NULL | 
+--------------+ 
1 row in set (0.00 sec) 

mysql> select true = null; 
+-------------+ 
| true = null | 
+-------------+ 
|  NULL | 
+-------------+ 
1 row in set (0.00 sec) 

mysql> select null != null; 
+--------------+ 
| null != null | 
+--------------+ 
|   NULL | 
+--------------+ 
1 row in set (0.01 sec) 

mysql> select null = null; 
+-------------+ 
| null = null | 
+-------------+ 
|  NULL | 
+-------------+ 
1 row in set (0.00 sec) 

あなたの表現は「TABLE.COLUMNがnullの場所」であることをいずれかの必要があり、「TABLE.COLUMNがnullでない場合"、またはifnull()のバリエーション:https://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull

関連する問題