找回密码
 立即注册

QQ登录

只需一步,快速开始

罗耀斌

金牌服务用户

57

主题

182

帖子

579

积分

金牌服务用户

积分
579
罗耀斌
金牌服务用户   /  发表于:2024-2-27 14:08  /   查看:1237  /  回复:15
本帖最后由 罗耀斌 于 2024-2-27 14:10 编辑



这样关联生成的SQL是这样的

select * from a
left join b on a.id=b.id

但项目中很多都是需要b这个表增加其他条件来过滤的,能否在红色圈圈内增加条件,可以实现下面这种语句

select * from a
left join b on a.id=b.id and b.type=101


这样就用需要经常用视图了,不然每次遇到这种情况都要用视图来解决,不是很方便

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

15 个回复

倒序浏览
Patrick.Zhu
银牌会员   /  发表于:2024-2-28 15:18:24
沙发
我不是很理解你们的背景,希望分享下。
看你的描述,是因为select * from a
left join b on a.id=b.id
这样运行出来,数据量大,加载慢,希望直接把过滤条件加进去?
还是说,现在实现类似的效果,还得在表格上再做查询,非常麻烦?

不论是那种情况,希望能分享下你的使用背景
回复 使用道具 举报
罗耀斌
金牌服务用户   /  发表于:2024-2-28 15:39:05
板凳
就是这样的,应为LEFT JOIN后面的表数据关联可能不只一个表,有几个表,但有一个类型区分,,现在left join后面没办法增加and 的条件,所以就得建个视图来区分,视图效率数据大高了很慢的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
罗耀斌
金牌服务用户   /  发表于:2024-2-28 15:39:36
地板
Patrick.Zhu 发表于 2024-2-28 15:18
我不是很理解你们的背景,希望分享下。
看你的描述,是因为select * from a
left join b on a.id=b.id

就是这样的,应为LEFT JOIN后面的表数据关联可能不只一个表,有几个表,但有一个类型区分,,现在left join后面没办法增加and 的条件,所以就得建个视图来区分,视图效率数据大高了很慢的
回复 使用道具 举报
Patrick.Zhu
银牌会员   /  发表于:2024-2-28 17:47:38
5#
情况是这样,如果你只需要类型=101的,你把这个过滤条件放在查询条件里面:

这样发请求本身就是过滤后的,请求就会加where去查询。活字格不是把所有数据拿到前端,再过滤

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
罗耀斌
金牌服务用户   /  发表于:2024-2-28 17:52:43
6#
Patrick.Zhu 发表于 2024-2-28 17:47
情况是这样,如果你只需要类型=101的,你把这个过滤条件放在查询条件里面:

这样发请求本身就是过滤后的 ...

放最后面where下,数据就查不到了呢。只能放在left join 表名后面的 and 条件的
回复 使用道具 举报
Patrick.Zhu
银牌会员   /  发表于:2024-2-29 17:33:57
7#
本帖最后由 Patrick.Zhu 于 2024-2-29 18:10 编辑

抱歉,我们内部沟通了,我之前理解有问题,我理解是你做表关联有问题。

你这个意思是表A,表B和表C都是1对1,然后你在表C里面加了对A,B的绑定,然后这个绑定键值还不唯一。

你能描述下,你这两个业务表是做什么的吗?什么行业的结构,我理解,更常见的是,表A,B有一列,去绑定对应的C,你这里C的ID还会重复,确实没有想通你这个表结构设计是什么情况

回复 使用道具 举报
罗耀斌
金牌服务用户   /  发表于:2024-3-1 10:22:24
8#
Patrick.Zhu 发表于 2024-2-29 17:33
抱歉,我们内部沟通了,我之前理解有问题,我理解是你做表关联有问题。

你这个意思是表A,表B和表C都是1 ...

我们公司是做ERP经销存和物流系统,但其他的业务系统,如CRM,OMS和其他只要涉及业务系统基本都有这种结构的,就如入库业务,只有入库主表和入库明细表,入库主表一般有一个入库类型字段,保存着每个企业自己的类型如【采购入库、外包入库、固定资产入库、委外加工入库、维修入库】等,选择入库类型后,明细表上面有选择单据的按钮(选择入库类型对应的单据),采购入库就是选择采购订单表,委外加工入库就是选择委外加工业务表,以此类推。所以现在采购部门这边要在采购订单列表里显示出当前采购订单的入库数,他们要核对,委外加工部门也要在他们加工列表显示入库数,那就要先关联入库明细表,应为订单ID在入库明细表里,再关联入库表,入库表left join 入库表 on 入库明细表.入库表ID = 入库表.id and 入库表.入库类型 = 采购订单入库。。所以现在没办法增加and就只能做一个采购订单入库视图,几个类型就得几个视图,业务系统可不止入库有问题,出库、收款、付款、对账、全部是是这种模式,用咱这个做那就是表看不到几个,视图N多了,而且一般小企业基本一个系统用几年或10几年,基本也不会做年度数据结转,以后数据量大了视图对我们公司运维人员也是一个压力,到时系统会很慢
还有就只要全部把表分开,采购入库独立一个页面加独立的表,外包入库独立一个页面加独立的表,这样操作也麻烦

如这个是采购订单功能,他来源就有来自销售单,待出库单


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
罗耀斌
金牌服务用户   /  发表于:2024-3-1 10:27:32
9#
而且在left join 后面增加and条件也是很基本的SQL语法,对于业务系统用到的地方还是挺多的,咱这个平台开发确实挺方便的,肯定也不能局限于OA这种纯表单系统
回复 使用道具 举报
Patrick.Zhu
银牌会员   /  发表于:2024-3-1 18:12:00
10#
理解,left join 后面增加and本身就是基本的SQL语法,我们也有很多客户开发ERP、CRM、OMS系统等,你在论坛、市场也能看到很多来自客户的相关分享,但是类似的问题很少,我不确定是不是我们没有给你推荐最佳的用法,你在设计某些功能时绕了些路。
我们研究下这个问题,有结果了给你回复。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部