允许CASE语句的重复匹配

时间:2011-07-31 18:21:37

标签: mysql sql select case

如何在此WHERE CASE语句中显示匹配的所有MatchID值:

SELECT 
   `Word`, 
   CASE
       WHEN `Word` LIKE 'a%' THEN 12
       WHEN `Word` LIKE 'b%' THEN 13 
       WHEN `Word` LIKE 'a%' THEN 14
       ELSE -1 
    END AS MatchID
FROM `Words`

我的表包含a,b和c,比方说。目前,该表的结果仅显示:

a   12
b   13

我希望它也能显示:

a   14

换句话说,我希望CASE子句显示所有匹配,而不仅仅是第一次匹配。有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

这可能是一种更优雅的方式来做你要求的,但这是一个可能的解决方案:

SELECT `Word`, 12 AS MatchID FROM `Words` WHERE `Word` like 'a%'
UNION
SELECT `Word`, 13 AS MatchID FROM `Words` WHERE `Word` like 'b%'
UNION
SELECT `Word`, 14 AS MatchID FROM `Words` WHERE `Word` like 'a%'

编辑:如果表现是一个很大的问题,那么你也可以考虑采用混合方法;对于 a% b%,使用一个带有CASE语句的SELECT,然后对于第二个 a%使用另一个SELECT的UNION。

答案 1 :(得分:0)

我认为这也应该有用。

SELECT `Word`,
       COALESCE(`MatchID`, -1) AS `MatchID`
FROM   `Words`
       LEFT JOIN (SELECT 'a%' AS `Match`, 12   AS `MatchID`
                  UNION ALL
                  SELECT 'b%' AS `Match`, 13   AS `MatchID`
                  UNION ALL
                  SELECT 'a%' AS `Match`, 14   AS `MatchID`) AS `Matches`
         ON `Words`.`Word` LIKE `Matches`.`Match`