7

にストアド プロシージャを記述しましたsqlyog。これは非常に長く、concatステートメントを除くすべての必要な機能を実行するため、その特定のクエリのみをリストします。

UPDATE recipes_new 
SET co_auths = CONCAT(co_auths,',',c1id) 
WHERE id = name_in; 

私は基本的に 2 つのフィールドを分離したいと考えており、このステートメントはカーソルに配置されているため、反復処理が行われます。co_auths現時点ではnullなので、結果を,1,2,3として取得します。ここで、 1,2,3にしたいのです。最も適切な解決策は何でしょうか?

4

3 に答える 3

7

を使用してIF

UPDATE recipes_new 
SET co_auths = IF(co_auths IS NULL, c1id, CONCAT(co_auths, ',', c1id))
WHERE id = name_in; 

の値がco_authsではなく空の文字列の場合NULL:

UPDATE recipes_new 
SET co_auths = IF(LENGTH(co_auths), CONCAT(co_auths, ',', c1id), c1id)
WHERE id = name_in; 
于 2013-02-22T14:40:05.597 に答える
1

MySQL returning an empty field: CONCAT(nonEmpty1,empty2,nonEmpty3) = NULL CONCAT_WS is what you are looking for

UPDATE recipes_new SET co_auths = CONCAT_WS(co_auths,',',c1id) WHERE id = name_in; 
于 2013-02-22T14:41:25.690 に答える
1

これはCASE、NULL かどうかを確認するために使用する必要があります。

CONCAT(
    CASE 
        WHEN IFNULL(co_auths,'') = ''
        THEN '' 
        ELSE CONCAT(co_auths, ',') 
    END, c1id)
于 2013-02-22T14:39:01.977 に答える