在MySql中,如何在WHERE IN子句中使用字符串函数?

例如:-

select * from product p left join catalog c on c.catalogid in ((TRIM(BOTH ',' FROM (REPLACE(p.catalog_ids,',,',',')))));

这里p.catalogs_ids =',36,,37,,38,';

但是上面的查询结果

select * from product p left join catalog c on c.catalogid in ('36,37,38');


任何帮助将不胜感激。

最佳答案

问题是您试图在字符串上使用IN。进行字符串比较,而不是像这样:

SELECT *
FROM product p
  LEFT JOIN catalog c
    ON ',' + p.catalog_ids + ',' LIKE  '%,' + c.catalogid + ',%'


多余的逗号有点令人费解,但这是为了确保匹配符合整数而不是数字的一部分。您没有说出catalogid是什么类型,因此您可能需要像这样进行转换:

SELECT *
FROM product p
  LEFT JOIN catalog c
    ON ',' + p.catalog_ids + ',' LIKE  '%,' + CAST(c.catalogid AS CHAR) + ',%'

关于mysql - 如何在WHERE IN子句中使用字符串函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18053487/

10-10 03:23