Mysql
 sql >> база данни >  >> RDS >> Mysql

Разделете (разгънете) стойности на колони, разделени със запетая, на редове

АКТУАЛИЗИРАНО Можете да го направите с SQL по този начин

INSERT INTO branch_table (id, branch_id)
SELECT e.id, SUBSTRING_INDEX(SUBSTRING_INDEX(e.branch_ids, ',', n.n), ',', -1) branch_id
  FROM eligibility_table e CROSS JOIN 
(
   SELECT a.N + b.N * 10 + 1 n
     FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
    ORDER BY n
) n
 WHERE n.n <= 1 + (LENGTH(e.branch_ids) - LENGTH(REPLACE(e.branch_ids, ',', '')))
 ORDER BY id, branch_id
 
  • Подзаявката с псевдоним на n генерира в движение поредица от числа (числа или таблица за преброяване) от 1 до 100 в този конкретен случай с помощта на UNION ALL и CROSS JOIN . Понякога е удобно да имате истинска таблица за преброяване във вашата база данни .
  • Във външния изберете най-вътрешния SUBSTRING_INDEX() получава всичко до n-тия елемент в списъка и външния SUBSTRING_INDEX() извлича по-голямата част отдясно след последния разделител, като ефективно получава самия n-ти елемент.
  • CROSS JOIN ни позволява да създадем набор от редове, който е декартово произведение (от 100 реда в n и всички редове в eligibility_table)
  • условие в WHERE клауза филтрира всички ненужни редове от набора с резултати

Забележка:тази заявка ще раздели до 100 идентификатора на клонове. Ако имате нужда от повече или по-малко, можете да коригирате ограничение, като редактирате вътрешната подзаявка

Резултат в branch_table:

<преди>| ID | BRANCH_ID |------------------| 1 | 621 || 1 | 622 || 1 | 623 || 1 | 625 || 2 | 621 || 2 | 650 |

Ето го SQLFiddle демонстрация



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. php скрипт на търсачката

  2. Създаване на тригер за актуализиране на колона за сортиране/ред

  3. Автоматизирайте масовото зареждане на данни от s3 към екземпляр на Aurora MySQL RDS

  4. Създаване на филтрируем списък с Laravel и Eloquent заявки

  5. Има ли начин в MySQL да обърнете булево поле с една заявка?