如何在Mysql存储过程中将字符串分割成数组求交集?

皮皮鲁的休
  • 1.1k

具体的需求是这样,A表和B表都有一个名为tagsvarchar类型字段,里面存储的是按照逗号分隔的tag_id字符串。

mysql> describe A;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| tags  | varchar(255)     | YES  |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> describe B;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| tags  | varchar(255)     | YES  |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

mysql> SELECT * FROM A;
+----+----------------+
| id | tags           |
+----+----------------+
|  1 | 1003,1004,1005 |
+----+----------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM B;
+----+----------------+
| id | tags           |
+----+----------------+
|  1 | 1001,1002,1004 |
+----+----------------+
1 row in set (0.00 sec)

我现在需要在存储过程中比对AB中的tags字段里是否含有相同的交集部分。比如A表里现在有1003,1004,1005,而B表里有1001,1002,1004,中间有个1004的tag就是它们的交集,而在mysql里做这样的字符串分割成数组求交集似乎不是那么容易,或者有没有其它的办法呢?

回复
阅读 124
1 个回答
✓ 已被采纳

仅判断是否有交集可以使用

A.tags REGEXP replace(B.tags, ',', '|')
你知道吗?

宣传栏