2013-06-11 3 views
0

와일드 카드 문자를 기반으로 데이터를 필터링해야하는 select 문을 작성하고 싶습니다. 나는 이런 식으로 글을 썼다. 그러나 내 목적에 부합하지 않는다. :COALESCE를 사용하여 mysql에서 쿼리 선택

Select r.CompanyID,r.Description,c.BusinessUnitID,c.BusinessSourceID as BusinessSrcID, 
c.Description as BusinessDesc from RCompanyTable r 
join CBusinessUnitTable c on r.CompanyID=c.CompanyID 
WHERE r.CompanyID like CASE WHEN COALESCE('Regexp(*)', '') = '' THEN r.CompanyID ELSE 'Company2' END 

그러나 이것은 항상 else 부분을 실행한다. 내가 찾고있는 것은 조건에 * 통과 할 때 모든 데이터를 제공해야한다는 것입니다. 내 RCompanyTable 난 Company1 및 Company2 두 레코드가 있기 때문에 나는 그 쿼리에서 전달할 경우 그 다음 company1 및 company2 데이터를 모두 반환해야하지만 내가 regexp (any1) 통과하면 Comapany1 데이터 제공해야합니다 및 둘 다 조건이 사실이 아니라면 회사 2 데이터를 표시하는 다른 부분으로 가야합니다. 답변을 기다리십시오. 사전

답변

0
WHERE r.CompanyID = CASE WHEN r.CompanyId LIKE '%*%' THEN r.CompanyID ELSE 'Company2' END 

이의 감사 절은 companyID가에 *를 가지고, 또는 companyID이 Company2 모든 레코드를 반환합니다. 이게 너 니 뒤에 오는거야?

+0

하지만 여전히 else 부분을 실행합니다. (물론 그렇습니다. 한 가지만 더 찾고 있습니다. Case 사실 부분을 정규 표현식과 연관 시키므로 와일드 카드 나 데이터를 전달할 때 데이터를 기반으로해야합니다. 다른 사람으로부터 데이터를 얻으십시오 part – Roy

+0

CompanyId는 CompanyId 대신 ComapnyName을 의미할까요? 필드에 별표가 있으면 else를 치면 안됩니다. –

0

내가 정확히 *regexp(any1)으로 원하는 것을 알고 있지만, 상수 문자열이 있다고 가정하지 않는,이 쿼리가 작동합니다 :

SET @parameter = '';  

Select r.CompanyID 
    , r.Description 
    , c.BusinessUnitID 
    , c.BusinessSourceID AS BusinessSrcID 
    , c.Description AS BusinessDesc 
    FROM RCompanyTable r 
    JOIN CBusinessUnitTable c ON r.CompanyID = c.CompanyID 
    WHERE (@parameter LIKE '%*%' AND r.CompanyID IN ('Company1', 'Company2')) 
     OR (@parameter LIKE 'regexp(any1)' AND r.CompanyID = 'Company1') 
     OR (@parameter NOT IN ('%*%', 'regexp(any1)') AND r.CompanyID = 'Company2') 

@parameter을 당신이 전달하려고하는 무엇인가 질문.