指定SQL语句是否可查询与加州用户名字首字母相同的所有用户?
问题结论
这条SQL完全不能实现需求,整体方案是错误的。
错误原因拆解
- 逻辑匹配范围完全错误:现有SQL加了
state_name = 'CA'的过滤条件,最终只会返回居住在加州的用户,根本查不到其他州、哪怕名字首字母符合要求的用户,和「查询所有符合首字母条件的用户」的需求完全相悖。 - 首字母匹配逻辑写错:
user_name like '%' || :user_name || '%'的作用是模糊匹配**用户名任意位置包含传入参数:user_name**的记录,完全不是匹配首字母。如果要匹配首字母,语法应该是user_name like left(:user_name,1) || '%',前后都加%是全模糊匹配,和首字母匹配的要求不沾边。 - 整体逻辑和标注的功能无关:现有SQL的实际作用是「查询居住在加州、用户名包含你传入的某个关键词的用户」,和注释描述的「匹配所有和任意加州用户首字母相同的用户」没有任何关系。
正确实现方案
你需要先查询得到所有加州用户的名字首字母集合,再匹配全量表中首字母落在这个集合中的用户,示例代码如下:
select * from users where left(user_name, 1) in ( select distinct left(user_name, 1) from users where state_name = 'CA' )
关于||运算符的说明
如果你的数据库支持||作为字符串拼接运算符,语法层面是没有问题的。但你之前的方案本身逻辑错误,哪怕||语法正确,也不可能实现需求,这才是资料提示你这种方案不合理的核心原因。
内容的提问来源于stack exchange,提问作者mike510a
相关产品推荐
相关产品推荐

