2013-10-05 6 views
1

Мой запрос выглядит,Случай с пунктом В

SELECT `OFFER_ASSIGNED_TO`, 
(CASE WHEN `OFFER_ASSIGNED_TO` IN (SELECT GROUP_CONCAT(`EMP_ID` SEPARATOR ',') FROM `f_employee_master` WHERE (`HEAD_OF_EMP`=13 OR `SUPERVISER_ADMIN`=13) AND is_active='Y') THEN 'Y' ELSE 'N' END) HI 
FROM f_offer_master 

WHERE fy_id=6 

С Результат, как это

OFFER_ASSIGNED_TO HI 
       13 N 
       42 N 
       13 N 
       25 N 
       45 N 
       25 N 

результат следующего запроса:

SELECT GROUP_CONCAT(`EMP_ID` SEPARATOR ',') FROM `f_employee_master` WHERE (`HEAD_OF_EMP`=13 OR `SUPERVISER_ADMIN`=13) AND is_active='Y' 

is=5,8,9,10,20,21,22,25,29,33,34,35,41 

И когда я пишу запрос, как:

SELECT `OFFER_ASSIGNED_TO`, 
(CASE WHEN `OFFER_ASSIGNED_TO` IN (5,8,9,10,20,21,22,25,29,33,34,35,41) THEN 'Y' ELSE 'N' END) HI 
FROM f_offer_master 

WHERE fy_id=6 

Я получаю результат:

OFFER_ASSIGNED_TO HI 
       13 N 
       42 N 
       13 N 
       25 Y 
       45 N 
       25 Y 

что на самом деле правильный результат.

Но почему мой первый запрос не дает мне правильного результата.

ответ

0
SELECT GROUP_CONCAT(`EMP_ID` SEPARATOR ',') FROM `f_employee_master` WHERE (`HEAD_OF_EMP`=13 OR `SUPERVISER_ADMIN`=13) AND is_active='Y' 

даёт один результат. Этот результат представляет собой строку, а именно «5,8,9,10,20,21,22,25,29,33,34,35,41».

Использование с IN эквивалентно IN ('5,8,9,10,20,21,22,25,29,33,34,35,41'), а не IN(5,8,9,10,20,21,22,25,29,33,34,35,41). Чтобы получить последнее, вам нужно будет избавиться от GROUP_CONCAT, например:

CASE WHEN `OFFER_ASSIGNED_TO` IN (SELECT `EMP_ID` FROM ... 
Смежные вопросы