我有两个名为cities和cfgval的表 如果siteid条件为true,那么我查询第二部分
SELECT cfgval FROM sitecfg where cfg='affiliate_sitecityidlock' and siteid=24
将返回"18,20,12,15,22,4,3,9,"
SELECT TRIM(TRAILING ',' FROM
查询。
但是,当我将所有查询放在一起时,它只返回一行,我的查询显示在下面
select * from cities where siteid=0 and id
IN(
SELECT TRIM(TRAILING ',' FROM
(SELECT cfgval FROM sitecfg where cfg='affiliate_sitecityidlock'
and siteid=24)
)
)
如果我用直接值代替,即
select * from cities where siteid=0 and id IN(18,20,12,15,22,4,3,9)
它将返回所有行,我遇到了这个问题
答案 0 :(得分:0)
我想我知道你的问题是什么:你认为sub select会返回一个逗号分隔的id列表,你必须修剪最后一个逗号......不要试试这个:
select * from cities
where siteid=0
and id IN (SELECT cfgval FROM sitecfg where cfg='affiliate_sitecityidlock' and siteid=24)
答案 1 :(得分:0)
如果cfgval
返回带逗号分隔列的单行,则可以使用FIND_IN_SET()
函数:
SELECT *
FROM cities
WHERE siteid=0
AND FIND_IN_SET(id, (
SELECT SUBSTRING(cfgval, 2)
FROM sitecfg
WHERE cfg='affiliate_sitecityidlock'
AND siteid=24
)
)
注意:由于这是使用函数,因此无法使用索引,您应该考虑将cfgval
存储在多行中。
答案 2 :(得分:0)
据我所知,您的查询应该如下所示
SELECT * FROM cities WHERE siteid=0 AND LOCATE(CONCAT(',', id, ','),
CONCAT(',', (SELECT cfgval FROM sitecfg WHERE cfg='affiliate_sitecityidlock' AND siteid=24))