首页 新闻 会员 周边 捐助

SQL 多字段条件查询

0
[待解决问题]

一个数据库表,几十个字段,查找任意字段里包含北京的记录?

石葡萄的主页 石葡萄 | 菜鸟二级 | 园豆:272
提问于:2025-09-17 09:53
< >
分享
所有回答(6)
0

or 不能满足吗

慧☆星 | 园豆:5840 (大侠五级) | 2025-09-17 09:57
0

把所有字段拼接成一个字符串,外加一层like

看我的名字正好十个字 | 园豆:202 (菜鸟二级) | 2025-09-17 13:33
0

SELECT * FROM 表名
WHERE (列名 LIKE '%xx%')
OR (列名 LIKE '%yy%')
OR (列名 LIKE '%zz%');

静看碗里浮沉 | 园豆:202 (菜鸟二级) | 2025-09-17 13:52
0

SQL 多字段条件查询
一个数据库表,几十个字段,查找任意字段里包含北京的记录,在 mysql 里这句 sql 应该是这样:
SELECT * FROM table WHERE concat(field1,field2,field3……fieldn) like ‘% 北京 %’
反正是少不了将几十个字段名称都输入一遍;从另外一个角度考虑,有没有个记录的概念,直接针对记录操作呢?所以期望:
SELECT * FROM table WHERE concat(RECORD) like ‘% 北京 %’
解答
先看集算器SPL语言的答案:
f2da77f6aeb36fd7a6fa0831293e0bb

A2从数据库把数据取出来
A3用select函数进行条件过滤
~就指代的是当前记录;
~.array()得到整条记录的序列(可以理解为 JAVA 里的数组,只是这个数组比较广义,元素可以是任意数据类型);
~.array().concat(",")把整条记录就拼成了个大字符串;
pos(~.array().concat(","),"北京 ")在整条记录拼成的大字符串里查找北京出现的位置,不等于 -1 则表示找到了。
缺少了记录这个概念,好多查询需求做起来就都不顺手了。
再举个条件里需要其它记录的例子。销售额已经按照日期排好序了,想查找第二天销售额突然下降超过 10 万元的日期。这个难点在于要表示出:当前记录的销售额,下一条记录的销售额。
1dffb9403cb21b23b25df2b1e94ff46

~.销售额是当前记录的销售额;
[1].销售额是下一条记录的销售额;
还可以依次类推,~[-1] 是前一条记录,~[3] 是当前记录后面的第三条记录;
SPL语言从理论模型上做了大量的这类创新,能极大的提高描述计算的能力,可以想象掌握了 SPL 语言的你,一个人维护的数据计算业务量,能顶替十个传统 JAVA/ 数据库 SQL 程序员,那价值自然是不明而喻的。
绿草莓 | 园豆:245 (菜鸟二级) | 2025-09-18 09:33
0

方案一:
如果数据量在50w以内,可以考虑把数据加载到内存,然后用java/C#/python在内存中遍历查询。

当然,在内存中可以把每行的字段拼接在一起,然后查询。
方案二:
如果只是临时查询一下。可以把数据导出到excel,然后用pandas查询。
方案三:
如果是高频需求,可以把数据写入elasticsearch,这样提高查询效率。

参考:

楠木大叔 | 园豆:2154 (老鸟四级) | 2025-09-19 10:08
0

列合并成一个字符串查询得了

张朋举 | 园豆:2060 (老鸟四级) | 2025-09-25 16:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册