【问题标题】:matching comma separated values in MySQL on join [duplicate]在连接时匹配MySQL中的逗号分隔值[重复]
【发布时间】:2018-07-02 09:25:44
【问题描述】:

我有几个表需要加入,我无法更改数据库,因为它正用于多个不同的应用程序。

第一个表如下所示

id, list_of_foreign_id


1, "1, 3, 4, 8, 12, 13, 14, 15, 16, 23"

2, "1, 3, 4, 8, 23"

3, "1, 3, 8, 12, 13, 14, 15, 23"

4, "7"

....

forrening 表只是在 ID 上加入,可能如下所示

ID, name

1, "john Oliver"

2, "John Doe"

3, "Arthur Dent"

....

我需要将表中的 id 列表与表二上的 id 匹配。

查询将如下所示,但我不确定连接条件

Select ...
from
A
join
B on a.list_of_foreign_id contains B.id

我认为可以使用正则表达式来完成。

我尝试过使用定位,但它也匹配子字符串,如 1、3 将匹配 13 等。

我也环顾四周,发现了这篇文章, Comma Separated Numbers Regex 但我不确定如何使用正则表达式来查看特定情况。

【问题讨论】:

  • Commalists 通常是“糟糕的架构设计”。

标签: mysql regex


【解决方案1】:

您可以使用find_in_set()

SELECT *
       FROM A
            INNER JOIN B
                       ON find_in_set(B.id, A.list_of_foreign_id);

【讨论】:

  • 这在实践中不起作用,因为它只返回第一个匹配项。
  • 然后呢?一场比赛足以决定您要求的“a.list_of_foreign_id contains B.id”。
猜你喜欢
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 2013-05-31
  • 2017-07-04
  • 2013-10-06
  • 2020-06-27
相关资源
最近更新 更多