sql >> データベース >  >> RDS >> Mysql

mysqlの以前の値を削除せずに行を更新する

    最初に分割するのではなく、単に連結することはできませんか?

    UPDATE users_group 
    SET user_ids = CONCAT_WS(',', user_ids, '5' ) 
    WHERE group_id =1
    

    しかし、これは正しく正規化されていないデータベース設計を示唆しています。通常、コンマで区切られたリストは、Mark Ba​​kerが提案するように、代わりに別のテーブルの行として(つまり、リスト内の値ごとに1行)格納する必要があります。

    編集-挿入しようとした回数に関係なく、各user_idsフィールドに任意のIDのコピーを1つだけにしたい場合、および一度に複数のIDを追加できるようにしたい場合:-

    UPDATE users_group a
    INNER JOIN
    (
        SELECT 3 AS an_id
        UNION 
        SELECT 4
    ) b
    ON FIND_IN_SET(b.an_id, a.user_ids) = 0
    SET a.user_ids = CONCAT_WS(',', a.user_ids, b.an_id ) 
    WHERE a.group_id =1
    

    もう一度編集します-IDを含むユーザーのテーブルがある場合は、IDが追加するIDの1つであるIDからIDを選択できます。

    このようなもの。

    UPDATE users_group a
    INNER JOIN
    (
        SELECT id
        FROM users
        WHERE id IN (3, 4)
    ) b
    ON FIND_IN_SET(b.id, a.user_ids) = 0
    SET a.user_ids = CONCAT_WS(',', a.user_ids, b.id ) 
    WHERE a.group_id =1
    


    1. DockerインスタンスからMYSQLに接続できません

    2. Postgresqlは、特定の合計金額に達するまで選択します

    3. STIと親子関係を含む重複レコードを見つけるためのソリューション

    4. ホストからDockerコンテナでmysqlに接続します