在sql中将值从('1,2,3')拆分为('1','2','3')或(1,2,3)

时间:2018-02-23 11:02:50

标签: mysql sql

我有一个名为category_ids (text)的表字段,它将另一个表的ID保存为"1,2,3"

现在我想将此category_ids用于sql IN()查询。查询将类似于tab1.category_id IN (select category_ids from tab2)。但我遇到问题,因为select category_ids from tab2会返回'1,2,3',因此IN()查询无效。

有没有简单的方法可以在sql中将'1,2,3'转换为('1','2','3')(1,2,3)

2 个答案:

答案 0 :(得分:1)

您可以在此处使用FIND_IN_SET

SELECT *
FROM tab1
WHERE FIND_IN_SET(tab1.category_id,
                  (select category_ids from tab2));

这只是一个示例查询,您的实际查询可能会有所不同。但问题是,如果您想在CSV字符串'1'中搜索'1,2,3',那么就有办法实现。{/ p>

正如其他人已经提到的那样,您应该避免在表格中存储CSV数据。当我看到FIND_IN_SET被大量使用时,通常会有一股气味。

答案 1 :(得分:0)

如果table2有多行,您可以将existsfind_in_set()一起使用:

select t1.*
from table1 t1
where  exists (select 1
               from table2 t2
               where find_in_set(t1.category_id, t2.category_ids) > 0
              );

请注意,这是一个非常糟糕的数据结构。 table2中的每个类别ID都应该有一行。如果你这样做了,那么查询会更简单,性能更好。