2013-10-05 137 views
1

我查询的模样,案例与IN子句

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 ...