Here a sample for you but its only a sample. better is to change your database design.
the query
SELECT b.*,
CAST( MAX( ( IF ( a.Aid = 'a1' , ( LENGTH( CONCAT(b.Aids,','))
- LENGTH( REGEXP_REPLACE( CONCAT( b.Aids,','),CONCAT( a.Aid,',') ,'')))
/ LENGTH( CONCAT( a.Aid,',')),0))) AS INT) AS a1,
CAST( MAX( ( IF ( a.Aid = 'a2' , ( LENGTH( CONCAT(b.Aids,','))
- LENGTH( REGEXP_REPLACE( CONCAT( b.Aids,','),CONCAT( a.Aid,',') ,'')))
/ LENGTH( CONCAT( a.Aid,',')),0))) AS INT) AS a2,
CAST( MAX( ( IF ( a.Aid = 'a3' , ( LENGTH( CONCAT(b.Aids,','))
- LENGTH( REGEXP_REPLACE( CONCAT( b.Aids,','),CONCAT( a.Aid,',') ,'')))
/ LENGTH( CONCAT( a.Aid,',')),0))) AS INT) AS a3,
CAST( MAX( ( IF ( a.Aid = 'a4' , ( LENGTH( CONCAT(b.Aids,','))
- LENGTH( REGEXP_REPLACE( CONCAT( b.Aids,','),CONCAT( a.Aid,',') ,'')))
/ LENGTH( CONCAT( a.Aid,',')),0))) AS INT) AS a4,
CAST( MAX( ( IF ( a.Aid = 'a5' , ( LENGTH( CONCAT(b.Aids,','))
- LENGTH( REGEXP_REPLACE( CONCAT( b.Aids,','),CONCAT( a.Aid,',') ,'')))
/ LENGTH( CONCAT( a.Aid,',')),0))) AS INT) AS a5
FROM table_b b
CROSS JOIN table_a a
GROUP BY b.Bid;
sample - the tables
MariaDB []> SELECT * from table_a;
+-----+
| Aid |
+-----+
| a1 |
| a2 |
| a3 |
| a4 |
| a5 |
+-----+
5 rows in set (0.00 sec)
MariaDB []> SELECT * from table_b;
+-----+-------------+
| Bid | Aids |
+-----+-------------+
| b1 | a1,a1,a2,a3 |
| b2 | a3,a4,a5,a5 |
| b3 | a2,a3,a3 |
| b4 | a5,a1,a1,a3 |
| b5 | a3,a2,a1 |
+-----+-------------+
5 rows in set (0.00 sec)
**run the query **
MariaDB []> SELECT b.*,
-> CAST( MAX( ( IF ( a.Aid = 'a1' , ( LENGTH( CONCAT(b.Aids,','))
-> - LENGTH( REGEXP_REPLACE( CONCAT( b.Aids,','),CONCAT( a.Aid,',') ,'')))
-> / LENGTH( CONCAT( a.Aid,',')),0))) AS INT) AS a1,
->
-> CAST( MAX( ( IF ( a.Aid = 'a2' , ( LENGTH( CONCAT(b.Aids,','))
-> - LENGTH( REGEXP_REPLACE( CONCAT( b.Aids,','),CONCAT( a.Aid,',') ,'')))
-> / LENGTH( CONCAT( a.Aid,',')),0))) AS INT) AS a2,
->
-> CAST( MAX( ( IF ( a.Aid = 'a3' , ( LENGTH( CONCAT(b.Aids,','))
-> - LENGTH( REGEXP_REPLACE( CONCAT( b.Aids,','),CONCAT( a.Aid,',') ,'')))
-> / LENGTH( CONCAT( a.Aid,',')),0))) AS INT) AS a3,
->
-> CAST( MAX( ( IF ( a.Aid = 'a4' , ( LENGTH( CONCAT(b.Aids,','))
-> - LENGTH( REGEXP_REPLACE( CONCAT( b.Aids,','),CONCAT( a.Aid,',') ,'')))
-> / LENGTH( CONCAT( a.Aid,',')),0))) AS INT) AS a4,
->
-> CAST( MAX( ( IF ( a.Aid = 'a5' , ( LENGTH( CONCAT(b.Aids,','))
-> - LENGTH( REGEXP_REPLACE( CONCAT( b.Aids,','),CONCAT( a.Aid,',') ,'')))
-> / LENGTH( CONCAT( a.Aid,',')),0))) AS INT) AS a5
->
-> FROM table_b b
-> CROSS JOIN table_a a
-> GROUP BY b.Bid;
+-----+-------------+------+------+------+------+------+
| Bid | Aids | a1 | a2 | a3 | a4 | a5 |
+-----+-------------+------+------+------+------+------+
| b1 | a1,a1,a2,a3 | 2 | 1 | 1 | 0 | 0 |
| b2 | a3,a4,a5,a5 | 0 | 0 | 1 | 1 | 2 |
| b3 | a2,a3,a3 | 0 | 1 | 2 | 0 | 0 |
| b4 | a5,a1,a1,a3 | 2 | 0 | 1 | 0 | 1 |
| b5 | a3,a2,a1 | 1 | 1 | 1 | 0 | 0 |
+-----+-------------+------+------+------+------+------+
5 rows in set (0.00 sec)
MariaDB []>
-)