找回密码
 立即注册

QQ登录

只需一步,快速开始

Jack.Cheng
超级版主   /  发表于:2023-10-9 09:44  /   查看:1221  /  回复:2
本帖最后由 Jack.Cheng 于 2023-10-9 09:46 编辑

有一天,有个用户问到了这样子一个问题

e36423526156c76737769c745d992d5.png400072326.png

这个问题要是不熟悉数据库SQL编程的话,不太好想到解决思路。对SQL编写熟悉的话,其实会很快意识到这个需求用SQL里的联合查询写视图是最直接的思路。
因此我写了这么一个视图代码
  1. SELECT
  2.     "ID" `A`,
  3.     "甲" `B`,
  4.     "乙" `C`,
  5.     "丙" `D`,
  6.     "A" `E`
  7. FROM
  8.         "A表"
  9. UNION ALL
  10. select
  11.     "ID" `A`,
  12.     "丁" `B`,
  13.     "戊" `C`,
  14.     "己" `D`,
  15.     "B" `E`
  16. from
  17.     "B表"
  18. ORDER BY B
复制代码
最终视图如下
image.png277138060.png
我把工程文件放在了附件里面,大家可以下载下来具体看看。

用户拿到我的写法后,自己换了个场景试了下,因为他对SQL编写不熟悉,结果又出现了不少报错。我们一起来分析分析
1f76ded97c8d5a0338165a772a93396.png101906127.png
看懂软件报错需要读懂英文,我先来翻译下报错含义:
SQLite 错误1:来源附近:语法错误
那么我来看下来源,后面少了个英文逗号,SQL里面要求查出来的字段后面要用逗号分隔开。
其他的字段也是,后面都没有逗号,因此应该把逗号都补上来。

9c512138bb960cb210550f7698bb24c.png837698974.png
翻译下报错含义:
SQLite 错误1:UNION ALL左边和右边的SELECT子句,他们结果集的数量不一样
这是标准SQL语法UNION ALL的要求,左边结果集和右边结果集的列数要一致。而图片里面,UNION ALL左边是5列,右边是6列,显然是有问题的,需要根据需求进行SQL修改。


从这个实际场景中可以看到,面对较为复杂的需求时,需要具备初级SQL能力,并且能够根据SQL报错独自排查出错误。
SQL能力这个,我建议大家可以看一本书,入门还可以
image.png723465881.png

拍错能力这个是真没啥诀窍了,得肯吃苦,肯琢磨。遇到报错自己先翻译下,看看能不能分析出来,然后百度搜索,通过他人经验来分析,不行再问问其他懂的人,然后自己总结沉淀。
不经历这么个过程,没法具备火眼金睛!

SQL拼接表.fgcc

708.62 KB, 下载次数: 47

2 个回复

倒序浏览
KinShing
初级会员   /  发表于:2023-10-9 10:13:15
沙发
hjyzw:
回复 使用道具 举报
linsh
注册会员   /  发表于:2024-3-23 16:14:42
板凳
数据库知识也是很重要的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部