Нельзя использовать REPLACE для создания списка с разделителями-запятыми для использования в предложении IN
. Чтобы использовать все как есть, вам нужно будет использовать Подготовленные операторы MySQL (фактически динамический SQL) - сначала создайте список, разделенный запятыми, и вставьте его в запрос SQL, созданный в виде строки, перед его выполнением.
SELECT a.category_id,
a.yyyymm,
a.cat_balance_ytd
FROM GL_VIEW_CAT_BALANCES a
JOIN GL_OPTIONS o ON INSTR(o.detail2, a.category_id)
AND o.option_id = 'GLREPFUNCJOB01'
JOIN (SELECT b.category_id,
b.gl_unique_id,
MAX(b.yyyymm) 'yyyymm'
FROM GL_REPCAT_BALSs b
WHERE b.yyyymm <= 200910
GROUP BY b.category_id, b.gl_unique_id) x ON x.category_id = a.category_id
AND x.gl_unique_id = a.unique_id
AND x.yyyymm = a.yyyymm
WHERE a.gl_id = '/JOB//9'
AND a.fin_years_ago = 0
Вот непроверенная, возможная нединамическая альтернатива SQL, использующая FIND_IN_SET
:
SELECT a.category_id,
a.yyyymm,
a.cat_balance_ytd
FROM GL_VIEW_CAT_BALANCES a
JOIN (SELECT REPLACE(o.detail_2, ' ', ', ') 'detail2_csv'
FROM GL_OPTIONS o
WHERE o.option_id = 'GLREPFUNCJOB01') y ON FIND_IN_SET(a.category, y.detail2_csv) > 0
JOIN (SELECT b.category_id,
b.gl_unique_id,
MAX(b.yyyymm) 'yyyymm'
FROM GL_REPCAT_BALSs b
WHERE b.yyyymm <= 200910
GROUP BY b.category_id, b.gl_unique_id) x ON x.category_id = a.category_id
AND x.gl_unique_id = a.unique_id
AND x.yyyymm = a.yyyymm
WHERE a.gl_id = '/JOB//9'
AND a.fin_years_ago = 0