在一个表中,有一列包含用逗号分隔的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/