开发者社区> 问答> 正文

sql 请教通讯录如何写模糊查询?:报错

字段名如下 
name|phone|dress|em|qq|mark

想任意输入一些值,透过查询姓名或电话号码或地址或QQ等进行模糊查询

注:只有一个输入框输入查询条件

SELECT * FROM from WHERE name ||phone||dress||qq LIKE %某值%

上面语句有一个问题就是 如果某字段是null 值,则查询不到

请教各大神,怎么写这个SQL语句会最佳?

展开
收起
kun坤 2020-06-09 22:32:18 642 0
1 条回答
写回答
取消 提交回答
  • 换成多个查询条件是对的,如果一定要连接查询的话,要注意 || 只要其中一个字段为null结果为null,所以每个字段要给他一个默认值:

    SELECT * FROM [表名] WHERE ifnull(name,'') || ifnull(phone,'') || ifnull(adress,'') || ifnull(qq,'') LIKE '%某值%'




    ######棒,用函数,学习了######nvl?######ifnull等同于nvl 新学数据库不懂知识勿见怪######

    nvl 是函数 不是SQL 语句


    ######如果WHERE 字段每个都有索引,建议分开查,然后数据合并######回复 @菲菲OSC : 通过SQL可以合并,程序也可以。######怎么分开查然后数据合并呢? sql 语句怎么写?######@  行者GC 怎么分开查 然后数据合并呢?######用 or######+10086######or 我也想过,只是觉得语句长了点。。。######

    数据量大得话,应该用全文检索了, 毕竟  %% 用不到索引,效率很低。

    数据量一般的话, 可以考虑 or,union。concat_ws 可能会有 误查得情况

    ######谢######

    过滤后有2中类型数据

    1. 姓名和地址 不是全数字

    2. QQ和手机是全数字

    然后针对查询就好

    ######

    引用来自“烧土豆”的答案

    过滤后有2中类型数据

    1. 姓名和地址 不是全数字

    2. QQ和手机是全数字

    然后针对查询就好

    不是很明白,新手,sql语句不是很熟,写一下怎么实现好吗
    ######回复 @烧土豆 : 谢谢指教######一个输入框是四种类型关键词的入口 如果or查询肯定很慢 所以给出思路就是劲量分拆这四种类型的关键词 回复中我简单的分拆成2中类型的 一个全数字 一个不全数字 你可以再细分 当然能分成一种最好 原则是不要把压力给数据库
    2020-06-09 22:32:23
    赞同 展开评论 打赏
问答分类:
SQL
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载