sql语句如何查询多个字段第一个字段有查询结果记录就不执行后面的查询条件了

时间:2022-04-21 02:54:57
一张客户资料表的结构是编号ID(自增长),客户名字,客户电话1,客户电话2,客户手机1,客户手机2,其他电话,地址。。。等其他一系列字段。现在是web客户端在一个输入框里输入要查询的电话内容到这张表里查询,本来sql语句是 客户电话1=‘010-12345’ or  客户电话2=‘010-12345’ or  客户手机1=‘010-12345’ or  客户手机2=‘010-12345’ or  其他电话=‘010-12345’,这样好像是变成了全表扫描了,每个条件都执行一遍,现在通过sql语句是否可以实现  如果客户电话1=‘010-12345’ 查询有记录就不执行后面的几个or了,或是第一个电话字段没有符合的就再去执行第二个如果在第二个字段有查询到就不执行后面的电话条件了,要如何实现呢?

7 个解决方案

#1


where条件存在短路规则,特别是OR,只要其中一个条件为true,就返回true,本身好像已经实现你的要求了,但是抛开这个,你的where条件应该意图是返回满足这些数据的所有数据,所以更应该都查询。而不是按顺序,毕竟你这个不是if exists吧

#2


coalesce返回它的参数中第一个非空表达式。
  SELECT COALESCE(NULL, NULL, NULL, GETDATE())
它将返回当前的日期。它略过第一个NULL值并返回第一个非空的值。
2011-09-02 14:37:41.530

#3





select * from BearerTb where coalesce(客户电话1,客户电话2,客户电话3)
 like '%010-12345%'

#4


select * from BearerTb where coalesce(客户电话1,客户电话2,客户电话3)=‘010-12345’

#5


学习了coalesce,谢谢

#6


有上百万条的数据记录,每条记录都有80个字段,且有点字段是xml类型的,占用空间也很大,这样查询的效率会怎么样?感觉很不好,稍微多几个人查询时,sql server 占用cpu就30%~50%。

#7


哇哇,学习了coalesce。

#1


where条件存在短路规则,特别是OR,只要其中一个条件为true,就返回true,本身好像已经实现你的要求了,但是抛开这个,你的where条件应该意图是返回满足这些数据的所有数据,所以更应该都查询。而不是按顺序,毕竟你这个不是if exists吧

#2


coalesce返回它的参数中第一个非空表达式。
  SELECT COALESCE(NULL, NULL, NULL, GETDATE())
它将返回当前的日期。它略过第一个NULL值并返回第一个非空的值。
2011-09-02 14:37:41.530

#3





select * from BearerTb where coalesce(客户电话1,客户电话2,客户电话3)
 like '%010-12345%'

#4


select * from BearerTb where coalesce(客户电话1,客户电话2,客户电话3)=‘010-12345’

#5


学习了coalesce,谢谢

#6


有上百万条的数据记录,每条记录都有80个字段,且有点字段是xml类型的,占用空间也很大,这样查询的效率会怎么样?感觉很不好,稍微多几个人查询时,sql server 占用cpu就30%~50%。

#7


哇哇,学习了coalesce。