如何在此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子句显示所有匹配,而不仅仅是第一次匹配。有什么想法吗?
谢谢!
答案 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`