我正在使用PHP生成一个需要按照自定义方式排序的SQL查询。我正在生成一个带有多个WHEN
语句的CASE
块,这些语句分配了数字排名。包括在内的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更冗长和丑陋。
简而言之?
因此,问题是:在CASE
语句中,WHEN
语句的顺序是否重要? SQL(我正在使用Oracle)会匹配第一个还是评估所有可能性并指定最高排名?
WHEN
条件将被使用 - 如果您恰好有多个匹配条件,则取决于它们出现的顺序。 - marc_s