2014-02-08 6 views
0

Мне нужно использовать результаты, содержащиеся в GROUP_CONCAT, в другом запросе, но я не могу решить, как это сделать, поскольку они находятся в списке, разделенном запятыми.Использование результатов GROUP_CONCAT в другом запросе sql

Например, если GROUP_CONCAT (образец) содержал, B, C, D, E, F Я пытался сделать

SELECT * FROM `orders` WHERE `this` IN GROUP_CONCAT(sample) 

, но я получаю ошибку синтаксиса.

Я не могу использовать

WHERE `this` = GROUP_CONCAT(sample) 

потому, что пытается соответствовать this в запятую

Есть ли конкретный способ для достижения этой цели?

+0

Вам не нужно использовать результаты, содержащиеся в GROUP_CONCAT, в другом запросе. Период. – Strawberry

ответ

1

Использование FIND_IN_SET

SELECT * FROM `orders` WHERE FIND_IN_SET(`this`, GROUP_CONCAT(sample)) 

Или Вы можете использовать (если нет особых причин использовать GROUP_CONCAT)

SELECT * FROM `orders` WHERE `this` IN (sample) 

если sample является столбец orders таблицы

+0

образец является результатом другой таблицы. –

+0

Принял ваш ответ. Отлично работал для меня. Спасибо, что сообщили мне о FIND_IN_SET. Это будет полезно. :) –

+0

Тогда вам нужно перейти к первому варианту 'FIND_IN_SET'. благодаря – sarwar026

0

Вы должны просто объединить два запроса:

SELECT * 
FROM `orders` 
WHERE exists (select 1 
       from <other query without aggregation> s 
       where this = s.sample 
      ) 

Этот запрос может быть оптимизирован. Вы можете написать:

select * 
from orders o 
where find_in_set(o.this, sample) > 0; 

Это должно использовать полное сканирование таблицы и не может использовать индекс.

Смежные вопросы