SQL CASE:WHEN语句的顺序重要吗?
我正在使用PHP生成需要以自定义方式排序的SQL查询。我正在生成一个CASE
带有多个WHEN
分配数字排名的语句的块。WHEN
包含的语句取决于我可以查询多少信息。例如,如果我有一部电话,我将生成三个WHEN
语句:
WHEN phone = '(202) 555-5555' AND last_name = 'Smith' and first_name = 'John'
THEN 1
WHEN phone = '(202) 555-5555' AND last_name = 'Smith' THEN 2
WHEN phone = '(202) 555-5555' THEN 3
因此,我根据匹配的接近程度进行排名,并且对参数进行相同的评估(电话,名字和姓氏的匹配项应与地址,名字和姓氏的匹配项位于同一层)。但是,在为多条信息(电话,地址等)生成这些语句之后,我的WHEN
语句将全部乱七八糟。该THEN
1封端的条款将从彼此分离,同为THEN 2
等。我可以按顺序排列它们,但这会使我的PHP更加冗长和丑陋。
因此,
是:WHEN
语句在语句中的顺序CASE
重要吗?SQL(我使用的是Oracle)是否匹配第一个匹配项,或者它会评估所有可能性并分配最高排名?
回答:
是的,case语句的顺序 做 的事情。第一个匹配行将是返回的行。
因此,此语句:
(CASE WHEN phone = '(202) 555-5555' AND last_name = 'Smith' and first_name = 'John' THEN 1 WHEN phone = '(202) 555-5555' AND last_name = 'Smith' THEN 2
WHEN phone = '(202) 555-5555' THEN 3
END)
可以返回1、2或3(或NULL
)。以下内容将始终返回3(或NULL
),因为将永远不会处理最后两个条件:
(CASE WHEN phone = '(202) 555-5555' THEN 3 WHEN phone = '(202) 555-5555' AND last_name = 'Smith' THEN 2
WHEN phone = '(202) 555-5555' AND last_name = 'Smith' and first_name = 'John' THEN 1
END)
以上是 SQL CASE:WHEN语句的顺序重要吗? 的全部内容, 来源链接: utcz.com/qa/418894.html