1、纵向排列
set @rownum=0;
SELECT cast(
SUBSTRING_INDEX(
SUBSTRING_INDEX(
mcIds, ',', @rownum := @rownum + 1
)
, ',',- 1) AS signed
) as mcId
FROM any_table
WHERE @rownum < LENGTH(mcIds) - LENGTH(REPLACE(mcIds, ',', '')) + 1
问题:通过 in 语法查询纵向排列数据时,查询不出数据。
解决:外层包裹 select * from () ,原理不明,了解原理的大佬麻烦讲解一下!
set @rownum=0;
select * from table1 t where t.mcId in (
select mcId from (
SELECT cast(
SUBSTRING_INDEX(
SUBSTRING_INDEX(
mcIds, ',', @rownum := @rownum + 1
)
, ',',- 1) AS signed
) as mcId
FROM any_table
WHERE @rownum < LENGTH(mcIds) - LENGTH(REPLACE(mcIds, ',', '')) + 1
) x
);