基于正则表达式的 MySQL 连接

标签 mysql sql

我有一个表格产品,其中列之一是相关产品。 relatedproducts 包含由冒号分隔的串联产品 ID 字符串(productid 列),例如abc-123:foo-prod:ada69等。由于一些糟糕的设计,可能会出现产品从产品表中删除但仍然在相关产品列中引用的情况。

所以我需要一个遍历产品表中所有行的 sql 查询,通过分解数据(因此分解标题)检查相关产品列,并查看每个引用的产品是否存在于同一个产品表中。但是,我是 sql 的新手,在编写 join/regexp 查询来执行此操作时遇到问题。

任何帮助将不胜感激!

最佳答案

MySQL 可以匹配 regexp,但遗憾的是不能返回匹配的子串。

你最好使用FIND_IN_SET:

SELECT  *
FROM    products p
JOIN    product rel
ON      FIND_IN_SET(rel.id, REPLACE(p.related, ':', ','))

关于基于正则表达式的 MySQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1049924/

相关文章:

javascript - 从选择框中获取所有选项 NOT MULTIPLE 并将它们传递给 php 以插入 mysql

英语词典sql数据库

sql - 使用 SQL Server 作为具有多个客户端的数据库队列

python - 存储到 MySQL 数据库时,非 Unicode 字符会更改为 "????"

android - 为什么不直接将android连接到数据库?

sql - 在 SQL "IN"子句中使用元组

php - 我想在插入或更新 mysql 之前检查

MySql Server 8 将表名更改为区分大小写

php - 如何从 Laravel Eloquent 的 HasMany 关系中的连接表中获取特定列

mysql - 能否就具有以下要求的 MySQL 索引提供一些建议?