sql >> Database >  >> RDS >> Mysql

rij bijwerken zonder eerdere waarden in mysql te verwijderen

Kun je het niet gewoon samenvoegen, in plaats van het eerst op te splitsen?

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

Maar dit suggereert wel een slecht genormaliseerd databaseontwerp. Over het algemeen moet een door komma's gescheiden lijst in plaats daarvan worden opgeslagen als rijen in een andere tabel (dwz één rij per waarde in de lijst), zoals voorgesteld door Mark Baker.

BEWERKEN - Als u slechts één kopie van een id in elk veld user_ids wilt hebben, ongeacht hoe vaak u het probeert in te voegen, en u wilt meerdere id's tegelijk kunnen toevoegen:-

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

EDIT opnieuw - als u een tabel met gebruikers heeft die de id's bevatten, kunt u de id's selecteren uit die waar de id een is van de id's die u wilt toevoegen.

Zoiets.

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. EXP() Functie in Oracle

  2. Linux en UNIX verbinden met Azure SQL Data Warehouse

  3. Mysql-syntaxisfout bij het maken van een opgeslagen procedure

  4. Hoe SQL Server T-SQL-functie te gebruiken SUM:5 use-cases