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 (अनुमति, 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. डेलाइट सेविंग टाइम को ध्यान में रखते हुए रिपीटिंग डेट्स को कैसे स्टोर करें?

  2. MySQL:INT को DATETIME में बदलें

  3. MySQL पहले अक्षर के रूप में प्रतीकों के साथ छँटाई

  4. केवल mysqldump स्कीमा, बिना ड्रॉप के स्कीमा अपडेट

  5. MySql के साथ इकाई फ्रेमवर्क 6 का उपयोग करके DbUpdateConcurrencyException