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

как да заменя текст в клетка с данни в друга таблица в mysql

добре, можете да опитате нещо в следния ред:

това е настройка на теста:

mysql> select * from table1;
+------+------------+
| id   | permission |
+------+------------+
| a1   | 1, 2, 3, 4 |
| v2   | 2, 3, 4    |
+------+------------+
2 rows in set (0.01 sec)



mysql> select * from table2;
+------+------------+
| id   | permission |
+------+------------+
| 1    | Allow      |
| 2    | Not Allow  |
| 3    | Disabled   |
+------+------------+
3 rows in set (0.01 sec)


mysql> select id, GROUP_CONCAT(t2perm) from (SELECT t1.*, t2.id as t2id, t2.permission as t2perm from table2 t2 cross join table1 t1) crs where INSTR(permission, t2id) > 0 group by id;
+------+--------------------------+
| id   | GROUP_CONCAT(t2perm)     |
+------+--------------------------+
| a1   | Allow,Not Allow,Disabled |
| v2   | Not Allow,Disabled       |
+------+--------------------------+
2 rows in set (0.00 sec)

Да обясня малко; първо кръстосвате и двете таблици и това трябва да доведе до декартов продукт, както следва:

mysql> SELECT * from table2 cross join table1;
+------+------------+------+------------+
| id   | permission | id   | permission |
+------+------------+------+------------+
| 1    | Allow      | a1   | 1, 2, 3, 4 |
| 1    | Allow      | v2   | 2, 3, 4    |
| 2    | Not Allow  | a1   | 1, 2, 3, 4 |
| 2    | Not Allow  | v2   | 2, 3, 4    |
| 3    | Disabled   | a1   | 1, 2, 3, 4 |
| 3    | Disabled   | v2   | 2, 3, 4    |
+------+------------+------+------------+
6 rows in set (0.00 sec)

от този момент просто изберете редове, които имат един низ, съдържащ се в друг (INSTR(permission, t2id) => съпоставяне на разрешения върху идентификатори), в крайна сметка ще получите това:

mysql> select * from (SELECT t1.*, t2.id as t2id, t2.permission as t2perm from table2 t2 cross join table1 t1) crs where INSTR(permission, t2id) > 0;
+------+------------+------+-----------+
| id   | permission | t2id | t2perm    |
+------+------------+------+-----------+
| a1   | 1, 2, 3, 4 | 1    | Allow     |
| a1   | 1, 2, 3, 4 | 2    | Not Allow |
| v2   | 2, 3, 4    | 2    | Not Allow |
| a1   | 1, 2, 3, 4 | 3    | Disabled  |
| v2   | 2, 3, 4    | 3    | Disabled  |
+------+------------+------+-----------+
5 rows in set (0.00 sec)

сега просто обобщете резултатите с GROUP_CONCAT...

select id, GROUP_CONCAT(t2perm) from (SELECT t1.*, t2.id as t2id, t2.permission as t2perm from table2 t2 cross join table1 t1) crs where INSTR(permission, t2id) > 0 group by id;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL след задействане за вмъкване получава автоматично увеличена стойност, актуализиране на стойността на полето след вмъкване дава неизвестна грешка в колоната

  2. Грешка в синтаксиса на SQL при зареждане на файл с база данни (възможна грешка във версията?)

  3. Как мога да разбера стандартния набор от знаци/колекция в моя MySQL

  4. показване на mysql enum стойности в php

  5. Мога ли да използвам Django F() обекти с конкатенация на низове?