MySQL:在表列和 group_concat 中使用逗号分隔的 id

标签 mysql left-join

在一个表中,有一列包含用逗号分隔的id ex:“159,167”

我想在该表和包含这些 ID 的表之间进行等效的连接。

例如:

TableA             TableB
id desc            id desc tableAids  stock
1  test1           1  abc  1,2,3      1
2  test2           2  def  1,2        0
3  test3           3  ghi  3,4        10
4  test4

如何通过查询连接两个表?我探索了函数 group_concat() 但它返回一个字符串,我无法将其放入 IN 子句中。

我想做的是这样的:

Select a.desc from TableA a
LEFT JOIN TableB b on a.id = b.tableAids
WHERE b.stock > 1

最佳答案

对于您的问题,我有一个解决方案,但是:

  • 您应该认真考虑重构以去除逗号分隔的 id

  • 该解决方案现在可以满足您的需求,但无法优化(mysql 无法使用索引来加速执行,见下文)

试试这个:

select a.desc
from TableA a
inner join TableB b on find_in_set(a.id, b.tableAids) > 0
where b.stock > 1;

Mysql不能使用索引来连接表,因为连接条件中的列包含在一个函数中。但是,如果您在 TableB.stock 列上有一个索引,它可能会有所帮助。

记住:在一列中存储多个值是一个很大的NO-NO,您应该尽快摆脱它。以后会引起很多头痛。

关于MySQL:在表列和 group_concat 中使用逗号分隔的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759222/

相关文章:

mysql - 存储过程 : Get month

sql - 使用具有多个连接的 SQL 聚合函数

Mysql - 如果第一个条件为 TRUE,则运行下一个 AND 条件

mysql - 创建或更新 Sequelize

mysql - SSRS 报告数据库版本之间的被动性

php - 每插入一行插入数字+1

mysql - SQL IF 和 LEFT JOIN 导致数据库出现故障

php - 如何从第二张表中获取我知道 id 的第一张表

java - 如何通过id创建hibernate关联?

Mysql 搜索和替换查询 - 转义格式