在表格中,有一列包含以逗号分隔的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
答案 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 ,你应该尽快摆脱它。这会引起很多麻烦。