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

时间:2010-05-03 15:40:58

标签: mysql left-join

在表格中,有一列包含以逗号分隔的ID:“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

1 个答案:

答案 0 :(得分:1)

我有一个解决方案,

  • 你应该认真考虑重构以摆脱昏迷分离的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列上有索引,则可能会有所帮助。

请记住:在列中存储多个值是一个很大的 NO-NO ,你应该尽快摆脱它。这会引起很多麻烦。