2014-12-30 1 views
1

Мой функциональный код выглядит следующим образом.MySQL: создание списка разделенных запятыми и использование в IN

DECLARE ids VARCHAR(55); 
SELECT GROUP_CONCAT(id) INTO ids 
     FROM tableName WHERE ...; 
SELECT CONCAT(GROUP_CONCAT(id), ids) INTO ids FROM tableName .....; 
SELECT column_name FROM tableName WHERE id IN (**ids**); 

В этом я создаю список идентификаторов с двумя операциями select и применяя к списку IN. Это дает мне нулевой результат. если i CAST - идентификаторы как CONCAT (GROUP_CONCAT (id), CAST (ids как char)), то это дает мне результат первой строки.

ответ

0

Я решил эту проблему следующим кодом

DECLARE ids VARCHAR(55); 
SELECT GROUP_CONCAT(id SEPARATOR ',') INTO ids FROM tableName WHERE ...; 
SELECT CONCAT_WS(',', CAST(GROUP_CONCAT(id SEPARATOR ',')AS CHAR), CAST(ids AS CHAR)) INTO ids FROM tableName .....; 
SELECT column_name FROM tableName WHERE FIND_IN_SET (id, ids); 
0

Попробуйте это:

DECLARE ids VARCHAR(55); 
SELECT GROUP_CONCAT(id) INTO ids 
FROM (SELECT id 
     FROM tableName 
     WHERE... 
     UNION 
     SELECT id 
     FROM tableName 
     WHERE.... 
) AS A; 

SELECT column_name FROM tableName WHERE FIND_IN_SET(id, ids); 
+0

Это правильно, но это было бы не работать во временном случае таблицы. –