繁体   English   中英

SQL CASE:WHEN语句的顺序是否重要?

[英]SQL CASE: Does the order of the WHEN statements matter?

我使用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更加冗长和丑陋。

TL; DR?

所以简短的问题是: CASE语句中WHEN语句的顺序是否重要? 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM