mysql多表关联时可能出错的地方,如搜索出的记录数据变少了。

当多个表相关联时,就会出现此问题。

[En]

This problem occurs when multiple tables are associated.

例如其中单位串以单位表表示的货物表

[En]

Such as a table of goods in which the string of units is represented in the table of units

但这个单位的id之后进行了删除,并且不再奏效。
如下:

 select *
        from (select pg0.id,pg0.init_size,pg0.goods_id,
        pg0.goods_move_size,pg0.execution,pg0.operation,
        pg0.create_time,pg0.update_time
        from psog_purchase_log pg0 where pg0.is_del=0
        and pg0.store_log_id = 15)pg
        left join psog_goods g on pg.goods_id = g.id
        left join psog_cate c on g.cate_id = c.id
        left join psog_unit u on g.unit_id = u.id
        where g.is_del = 0 and c.is_del = 0 and u.is_del = 0

可以看到最终where语句判定u.is_del=0,判定单位表不为空
但其实有时候要查询一些记录数据,可能跟这个数值没有太大关系,以后商品单位空了也没关系。

[En]

But in fact, sometimes we have to query some record data, which may not have much to do with this value, and it doesn’t matter if the commodity unit is empty later.

然后,它可能会更改为如下所示:

[En]

Then it might be changed to something like this:

        select *
        from (select pg0.id,pg0.init_size,pg0.goods_id,
        pg0.goods_move_size,pg0.execution,pg0.operation,
        pg0.create_time,pg0.update_time,pg0.is_del
        from psog_purchase_log pg0 where pg0.is_del=0
        and pg0.store_log_id = #{storeLogId})pg
        left join
        (select g0.id,g0.cate_id,g0.unit_id,g0.goods_name,g0.goods_code,g0.is_del from psog_goods g0 where g0.is_del=0)g
        on pg.goods_id = g.id
        left join
        (select c0.id,c0.is_del,c0.cate_name from  psog_cate c0 where c0.is_del=0)c
        on g.cate_id = c.id
        left join (select u0.unit,u0.id,u0.is_del from psog_unit u0 where u0.is_del=0)u
        on g.unit_id = u.id

可以看到上面每个判定数据有效的is_del在单独的关联时就已经做了排查,
这样的作用是基于最left的表为基准,之后的即使未关联到的某id=某id,
那么要查询的select * 里面的数据只变为空,而该行数据以最左边的表,即pg表为基准不管其它关联与否,要查询的
空字段和非空字段之间的关系不是太大。

[En]

The relationship between empty and non-empty fields is not too great.

总结:
上面的sql查询时必须要能关联到类似商品分类商品单位名称的等等数据时才可以,否则那一行不予返回
而下面的这个sql只要pg表能查到那么之后的不管子表数据删除了没有,主表的数据还会展示

Original: https://www.cnblogs.com/ukzq/p/16263415.html
Author: DATA_MONK
Title: mysql多表关联时可能出错的地方,如搜索出的记录数据变少了。

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505387/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 位图的简单操作

    class BitMap { private byte[] words;//用一个字节数&#x7…

    数据库 2023年6月14日
    0140
  • Tomcat配置文件Server.xml解析

    一、Sax的事件驱动模型 类图 基础实现类 DefaultHandler2: 此类扩展了SAX2基本处理程序类,以支持SAX2 LexicalHandler , DeclHandl…

    数据库 2023年6月11日
    060
  • 容器化 | 构建 RadonDB MySQL 集群监控平台

    上一篇文章我们演示了如何《在 S3 备份恢复 RadonDB MySQL 集群数据》,本文将演示在 KubeSphere[1] 中使用 Prometheus[2] + Grafan…

    数据库 2023年5月24日
    087
  • Redis-数据结构

    Redis key-value结构组织 首先,Redis使用了一个全局哈希表来保存所有的键值对。这个全局哈希表,也就是一个存放哈希桶(entry)的数组。Redis可以用哈希算法算…

    数据库 2023年6月11日
    086
  • mysql查询优化

    1.count优化 a语句当行数超过11行的时候需要扫描的行数比b语句要多, b语句扫描了6行,此种情况下,b语句比a语句更有效率。 当没有where语句的时候直接select c…

    数据库 2023年5月24日
    085
  • day03-MySQL基础知识02

    MySQL基础知识02 4.CRUD 数据库CRUD语句:增(create)、删(delete)、改(update)、查(Retrieve) Insert 语句 (添加数据) Up…

    数据库 2023年6月11日
    081
  • [springmvc]ajax异步请求数据详细简单

    10.Ajax异步请求 Ajax即 Asynchronous Javascript And XML(异步JavaScript和XML在 2005年被Jesse James Garr…

    数据库 2023年6月16日
    084
  • 2. 函数

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    数据库 2023年5月24日
    089
  • [LeetCode]13. 罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做…

    数据库 2023年6月9日
    0132
  • Vue(十二)—组件通信

    参考文章:https://blog.csdn.net/qq_37288477/article/details/86630428 父子通信: 1.父传子props 官网demo:ht…

    数据库 2023年6月16日
    0100
  • SpringSecurity

    一、SpringSecurity介绍 1、介绍 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的事实上的标…

    数据库 2023年6月6日
    090
  • dba+开源工具:MHA复刻版,轻松实现MySQL高可用故障转移(附下载)

    由于MHA(mha4mysql-manager)工具在2018年已经停止维护更新,且不支持GTID复制模式,在原版基础上增补功能难度较大,因此考虑将其重构。 参考了原版MHA的故障…

    数据库 2023年5月24日
    0109
  • jenkins

    jenkins 1.简介 1.1 SVN介绍 1.2 Maven介绍 1.3 Ant介绍 1.4 Gradle介绍 1.5 jenkins工作原理 1.6 jenkins特点 2….

    数据库 2023年6月14日
    063
  • flowable 部署流程定义(从Classpath) 和 (根据ui.modeler的 modelId部署)

    /**部署流程定义(根据ui.modeler的 modelId部署) * @param modelId 模型ID * @from fhadmin.cn */ protected S…

    数据库 2023年6月6日
    0117
  • Docker常用命令

    镜像:Docker 镜像是用于创建 Docker 容器的模板容器:容器是独立运行的一个或一组应用仓库:用来保存镜像,可以理解为代码控制中的代码仓库 一个仓库中包含多个镜像,以镜像为…

    数据库 2023年6月11日
    087
  • Java基础七—Java并发基础

    一个类在可以被多个线程安全调用时就是线程安全的。 线程安全不是一个非真即假的命题,可以将共享数据按照安全程度的强弱顺序分成以下五类: 不可变、绝对线程安全、相对线程安全、线程兼容和…

    数据库 2023年6月6日
    0255
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球