使用COALESCE在mysql中选择查询

时间:2013-06-11 05:41:54

标签: mysql coalesce

我想写一个select语句,它应该根据通配符过滤数据。我写过类似的东西,但它不符合我的目的:

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数据和两个条件不是真的那么它应该转到显示Company2数据的其他部分 期待您的回答。 提前致谢

2 个答案:

答案 0 :(得分:0)

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

此where子句返回companyID中包含*,或companyID为Company2的所有记录。这就是你要追求的吗?

答案 1 :(得分: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是您要在查询中传递的内容。