MySQL:在表列和组中使用coma分隔的ID

MySQL:在表列和组中使用coma分隔的ID,mysql,left-join,Mysql,Left Join,在表中,有一列包含由comas ex分隔的ID:“159167” 我想在这个表和包含这些ID的表之间进行等效的连接 例: 如何通过查询连接这两个表?我研究了函数组_concat(),但它返回的字符串不能放入in子句中 我想做的是这样的: Select a.desc from TableA a LEFT JOIN TableB b on a.id = b.tableAids WHERE b.stock > 1 我对你的问题有一个解决办法,但是: >P>你应该认真考虑重构来消除昏迷分离的I

在表中,有一列包含由comas ex分隔的ID:“159167”

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

例:

如何通过查询连接这两个表?我研究了函数组_concat(),但它返回的字符串不能放入in子句中

我想做的是这样的:

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

我对你的问题有一个解决办法,但是:

    >P>你应该认真考虑重构来消除昏迷分离的IDS

  • 该解决方案可以满足您现在的需要,但无法进行优化(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列上有一个索引,它可能会有所帮助


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

我对你的问题有一个解决方案,但是

    >P>你应该认真考虑重构来消除昏迷分离的IDS

  • 该解决方案可以满足您现在的需要,但无法进行优化(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列上有一个索引,它可能会有所帮助


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

谢谢,我马上就去试试。我知道我应该重构,但重构会花费太多时间,而且我们没有预算。一、 我自己也在推动重构解决方案,但我不是本案的决策者。再次谢谢。谢谢。我马上就去试试。我知道我应该重构,但重构会花费太多时间,而且我们没有预算。一、 我自己也在推动重构解决方案,但我不是本案的决策者。再次感谢。