IN(CONCAT()) 不返回逗号分隔字符串 MySQL 中的结果
IN(CONCAT()) not returning results in MySQL for comma separated string
进行以下查询:
SELECT COUNT(1)
FROM tableA
INNER JOIN tableB
ON tableA.ID = tableB.pid
WHERE tableA.foo IN ('1234')
AND tableB.bar = 555
上面的查询 returns 1 个结果。
现在,由于我存储的数据的性质(逗号分隔的字符串[即:jkdjif,3-i-d,343),我尝试用这个替换上面的 IN() 以用引号包裹数据:
WHERE tableA.foo IN (CONCAT("'",REPLACE('1234',",","','"),"'"))
然而,这 returns 0 个结果。
它看起来与 IN() 中的 CONCAT() 有关,因为我已将其减少到 IN (CONCAT("'",643290,"'"))
这是为什么?我哪里错了?
您可以使用 FIND_IN_SET
代替:
SELECT COUNT(1)
FROM tableA INNER JOIN tableB ON tableA.ID = tableB.pid
WHERE FIND_IN_SET(tableA.foo, 'jkdjif,3-i-d,343') > 0
AND tableB.bar = 555
进行以下查询:
SELECT COUNT(1)
FROM tableA
INNER JOIN tableB
ON tableA.ID = tableB.pid
WHERE tableA.foo IN ('1234')
AND tableB.bar = 555
上面的查询 returns 1 个结果。
现在,由于我存储的数据的性质(逗号分隔的字符串[即:jkdjif,3-i-d,343),我尝试用这个替换上面的 IN() 以用引号包裹数据:
WHERE tableA.foo IN (CONCAT("'",REPLACE('1234',",","','"),"'"))
然而,这 returns 0 个结果。
它看起来与 IN() 中的 CONCAT() 有关,因为我已将其减少到 IN (CONCAT("'",643290,"'"))
这是为什么?我哪里错了?
您可以使用 FIND_IN_SET
代替:
SELECT COUNT(1)
FROM tableA INNER JOIN tableB ON tableA.ID = tableB.pid
WHERE FIND_IN_SET(tableA.foo, 'jkdjif,3-i-d,343') > 0
AND tableB.bar = 555