首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的sql内连接返回的数据比表1多得多?

在进行SQL内连接时,返回的数据比表1多得多可能有以下几个原因:

  1. 笛卡尔积:内连接是基于两个表之间的共同字段进行匹配的,如果两个表中的共同字段存在重复值,那么内连接的结果就会出现笛卡尔积。笛卡尔积是指两个表的每一行都与另一个表的每一行进行组合,导致返回的数据量大大增加。解决方法是确保共同字段的唯一性,或者使用其他连接方式(如外连接)来避免笛卡尔积。
  2. 数据重复:如果表1中的某些数据在表2中存在多个匹配项,那么内连接的结果就会出现重复数据。这可能是由于数据录入错误、数据冗余或者数据模型设计不合理导致的。解决方法是检查数据的完整性,确保数据的唯一性,或者使用DISTINCT关键字去除重复数据。
  3. 连接条件错误:内连接的结果是基于两个表之间的连接条件进行筛选的。如果连接条件不正确或者不完整,可能会导致返回的数据量异常。请检查连接条件是否正确,并确保连接条件能够准确地匹配到需要连接的数据。

总结起来,内连接返回的数据比表1多得多可能是由于笛卡尔积、数据重复或连接条件错误等原因导致的。在进行内连接时,需要仔细检查数据的完整性、唯一性和连接条件的准确性,以确保返回的数据量符合预期。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【数据库设计和SQL基础语法】--连接与联接--内连接和外连接的概念

1.2 为什么连接在数据库查询中很重要 连接在数据库查询中非常重要,因为它允许在多个表之间建立关系,使得可以更全面、更有深度地分析和检索数据。...内连接用于检索满足连接条件的行,返回两个表之间的交集。这种连接类型是 SQL 查询中最常用的一种,用于从关联表中获取相互关联的数据。...这对于数据分析、报告和生成关联性数据非常有用。 2.4 内连接的优缺点 内连接的优点: 精确匹配: 内连接返回两个表之间的精确匹配行,确保结果集中的数据是相互关联的,不包括不匹配的行。...更快的执行时间: 内连接通常比外连接的执行时间更短,因为它只涉及匹配的行,不需要考虑未匹配的行。 适用于关联度较高的表: 当两个表之间的关联度较高,匹配的行数相对较小时,内连接的性能可能更好。...内连接通常比外连接执行得更快,因为它只返回匹配的行。如果不需要保留未匹配项,考虑使用内连接。同时,了解并使用合适的外连接类型。

82610

为什么我的两个表建立数据关系有问题?

小勤:大海,为什么我这两个简单的表建立数据关系有问题啊? 大海:啊?出什么问题了?...小勤:你看,我先将表添加到数据模型,这是订单明细表的: 用同样的方法将产品表也添加到数据模型,然后创建表间关系,结果出错了! 大海:你的产品表里的产品名称重复了。 小勤:啊?...大海:那你能保证用vlookup查到的结果是你想要的吗? 小勤:啊,也对,vlookup都是返回最先找到的一个,这可能是错的。 大海:所以说,仔细想想,这种逻辑是不能成立的。...小勤:啊,知道了,看来我还是得把订单明细表里的产品ID放出来,不然做出来的数据分析都是不对的。 大海:很棒,这么快就想到产品ID的问题了。...小勤:你上次《表间关系一线牵,何须匹配重复拼数据》的文章里不是有提醒吗?只是我没想到我的数据那么快就存在这种情况。 大海:呵呵,名称重复的情况太正常了,所以尽可能都用ID编码。

1.2K20
  • 表设计与死锁,及为什么MYSQL 的死锁比别的数据库少

    这里触发了我关于死锁的一些看法,延伸到表设计,系统的设计。 首先,什么是死锁我觉得我就不在重复和婆婆妈妈了,如果还不知道什么是死锁,则还是先百度一下哈。...MYSQL数据库) 主要的原因有几点 1 传统的系统的设计基本上是围绕着一个或几个核心表进行的查询和DML 操作完成的,而一般传统的系统在设计之初可能由于业务大小,和业务量上,开发设计核心表的初衷都比较简单...反过来,题目中为什么提到MYSQL的死锁少的问题 1 一般来说用MYSQL的企业大部分都是互联网企业,而互联网企业的业务相对传统行业,业务简单,并且互联网企业的技术人员的水平,相对传统企业来说要高。...SQL SERVER Always on 是可以进行读写分离的,而 PG 更是天生就有这样的基因,各种数据的复制技术都是有的,基本上用在MYSQL上的技术在PG上进行读写分离都是OK 的。...这里不提ORACLE的原因,有2 , 1 ORACLE 在buffer 内存设计上异同于其他数据库,2 使用ORACLE的数据库的表设计人员,比较传统,出现上边死锁的设计方式与传统的三范式以及传统的表设计方式有关

    2.1K50

    为什么我建议需要定期重建数据量大但是性能关键的表

    如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~ 本文是“为什么我建议”系列第三篇,本系列中会针对一些在高并发场景下,我对于组内后台开发的一些开发建议以及开发规范的要求进行说明和分析解读...往期回顾: 为什么我建议在复杂但是性能关键的表上所有查询都加上 force index 为什么我建议线上高并发量的日志输出的时候不能带有代码位置 一般现在对于业务要查询的数据量以及要保持的并发量高于一定配置的单实例...一般在业务刚开始的时候,会考虑按照某个分片键多分一些表,例如订单表,我们估计用户直接要查的订单记录是最近一年内的。...BY id DESC LIMIT 20 这个表的分片键就是 user_id 一方面,正如我在“为什么我建议在复杂但是性能关键的表上所有查询都加上 force index”中说的,数据量可能有些超出我们的预期...重建表其实是一举两得的行为:第一可以优化这种存储碎片,减少要扫描的行数;第二可以重新 analyze 让 SQL 优化器采集数据更准确。

    88330

    重生之“我打数据结构,真的假的?”--1.顺序表

    1.本系列主要用于记录本菜鸟写leetcode的感悟 希望各位大佬多多指教(doge) 2.顺序表介绍 顺序表的本质还是数组,是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素...、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。...顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。...long类型存储sum; 最终会溢出 新思路: 取指针指向末尾元素与k的个位相加,成为新的末尾元素; 若超出10;则存储两者之和-10;并存储1至下一次求和 k=k/10;指针前移; (思路差不多...returnSize算出来再建立数组,只需最后得到* returnSizeze即可,r的其余空间存不存数据无所谓,只需确定r[* returnSizeze-1]---r[0]之间为所求 tmp

    8110

    数据结构原理:Hash表的时间复杂度为什么是O(1)?

    Hash 表的时间复杂度为什么是 O(1)? 想要回答这个问题,就必须要了解 Hash 表的数据结构原理,以及先从数组说起。...但在数组中插入、删除一个数据,就会改变数组连续内存空间的大小,需要重新分配内存空间,要复杂得多。Hash 表 前面提过,对数组中的数据进行快速访问必须要通过数组的下标,时间复杂度为 O(1)。...许多编程语言支持获得任意对象的 HashCode,比如 Java 语言中 HashCode 方法包含在根对象 Object 中,其返回值是一个 Int。...如图所示: 因为有 Hash 冲突的存在,所以“Hash 表的时间复杂度为什么是 O(1)?”...但是作为一个面试题,“Hash 表的时间复杂度为什么是 O(1)”是没有问题的。 我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    66511

    重生之“我打数据结构,真的假的?”--1.顺序表(无习题)

    C语言中的顺序表详细总结 1. 概述 顺序表(Sequential List)是一种线性数据结构,用于存储具有相同数据类型的一组元素。...这使得顺序表在进行随机访问时效率非常高,时间复杂度为 O(1)。然而,由于内存是连续的,所以在插入或删除元素时,可能需要移动大量的数据,因此插入和删除操作的时间复杂度较高。...以下我们通过 C 语言代码实现这些操作,以帮助理解顺序表的工作原理。 3.1 顺序表的数据结构定义 首先,定义顺序表的结构体。该结构体包含一个指针指向存储数据的数组,以及顺序表的当前长度和最大容量。...} } return -1; // 未找到 } 该函数遍历顺序表中的所有元素,找到与指定值匹配的元素,并返回其索引。...如果没有找到,返回 -1。 按索引查找:获取指定索引处的元素。

    12510

    SQL的未来:会话式解决问题

    如果你像我几年前一样,在长时间离开后重返 SQL,那么有重要的变更需要了解。首先,JSON。现在,许多面向 SQL 的数据库都支持 JSON 列,用于任意树形结构的数据。...JSON 特性可能会令人困惑,例如,在 Steampipe 查询中,如下所示,它隐式地将表 github_my_gist 与其 JSON 列 files 的扩展名连接。...在提供结果说明以及表架构和必需的 JSON 列示例后,您为与已经看到比您多得多的 SQL 模式和 AWS 策略模式的实体对话设置了上下文。...我还能如何编写此查询?我为什么要这样做?数据库将如何处理它?(也许您可以流利地阅读和理解查询计划,但我不能,我非常感谢我所能获得的所有帮助。)...我不想让放射科医生仅仅依赖 AI,但我确实希望他们咨询比他们见过的 X 射线和诊断结果多得多的实体。在信息技术领域,我希望代码和数据处理人员尽可能最好地利用这些新的推理合作伙伴。

    10910

    PyQt5数据库开发1 4.1 SQL Server 2008 R2如何开启数据库的远程连接

    前言 SQL Server 2008 R2如何开启数据库的远程连接 SQL Server 2008默认是不允许远程连接的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,远程连接数据库...需要做两个部分的配置: 1,SQL Server Management Studio Express(简写SSMS) 2,SQL Server 配置管理器/SQL Server Configuration...左侧选择“安全性”,选中右侧的“SQL Server 和 Windows 身份验证模式”以启用混合登录模式3 允许远程连接服务器 选择“连接”,勾选“允许远程连接此服务器”,然后点“确定”4 设置sa用户属性...注意事项 远程连接的字符串:"server=ip地址;Initial Catalog=数据库名;User ID=sa;Password=密码" 1,2005的外围应用配置器在2008中换了地方 2,...有些设置生效需要重启一下SQL Server我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    31510

    PyQt5数据库开发1 4.1 SQL Server 2008 R2如何开启数据库的远程连接

    ---- 前言 SQL Server 2008 R2如何开启数据库的远程连接 SQL Server 2008默认是不允许远程连接的,如果想要在本地用SSMS连接远程服务器上的SQL Server...2008,远程连接数据库。...需要做两个部分的配置: 1,SQL Server Management Studio Express(简写SSMS) 2,SQL Server 配置管理器/SQL Server Configuration...左侧选择“安全性”,选中右侧的“SQL Server 和 Windows 身份验证模式”以启用混合登录模式 3 允许远程连接服务器 选择“连接”,勾选“允许远程连接此服务器”,然后点“确定”...注意事项 远程连接的字符串:"server=ip地址;Initial Catalog=数据库名;User ID=sa;Password=密码" 1,2005的外围应用配置器在2008中换了地方 2

    1.1K20

    106-跟专家学习SQL优化-2

    : (此处留做读者思考时间) 1-创建驱动表E表上的一个覆盖索引; 2-给not exists 子查询内加个/*+ Hash_AJ */的hint: 优化后的执行计划: (图4)...我的这个优化方法,如果真如图1执行计划显示的那样, 预期优化后的执行时间也就十几毫秒. 但是再仔细想一想,事实应该并非如此....表的统计信息一般是在凌晨收集, 在那个时间段, 业务数据没有代表性,生成的执行计划也是不可信的. 所以这个SQL就不能按照图1执行计划显示的数据去优化....驱动表E返回的结果集大, 虽然我上面的优化方法在驱动表几十万记录的情况下也远比优化前效率高很多, 但是相对来说不如hash join更适合这个SQL,而且用了hash join, 隐式类型转换的问题也就无关紧要了...如果能够采集到60多秒执行情况下的sql monitor信息,就能够更清晰的看到执行计划中真实的结果集大小, 这种简单SQL的优化其实在1~2分钟内就能得出结论.

    21020

    小黑盒和长亭科技面经

    这是通过两种带内技术完成的: ● 基于错误的SQL注入:从显示的错误消息中获取有关数据库的信息 ● 基于联合的SQL注入:依赖于攻击者能够将UNION ALL被盗信息的结果与合法结果连接起来。...通常,攻击者会制作SQL语句,这些语句在呈现给数据库时会触发数据库系统创建与攻击者控制的外部服务器的连接。以这种方式,攻击者可以收集数据或可能控制数据库的行为。 二阶注入就是一种带外注入攻击。...区域传送使用TCP而不是UDP,因为数据同步传送的数据量比一个请求应答的数据量要多得多。 2.TCP是一种可靠连接,保证了数据的准确性。...索引是对数据库表中一个或多个列的值进行排序的结构。...设置索引付出的代价:1:增加了数据库的存储空间 2:插入和修改的时候需要花费较多的时间(因为索引也要随之变动) 好处:提高了表的搜索效率 Q:TCP为什么是3次握手?

    1.7K20

    不得不看,只有专家才知道的17个SQL查询提速秘诀!

    因此,你处理的数据比实际需要的多得多,查询返回结果是个奇迹。你不仅处理过多不需要的数据,还夺走了其他进程的资源。...这会导致严重的性能问题,尤其是这两方面: 返回的数据很有可能比你需要的多得多。 查询优化器将放弃并返回一个糟糕的查询方案。...我遇到过喜欢嵌套视图的客户,这个客户有一个视图用于几乎所有数据,因为它有两个重要的连接。 问题是,视图返回的一个列里面居然有 2MB 大小的文档,有些文档甚至更大。...该公司将成千上万行数据发送到前端,以便能够运用业务逻辑,并显示所需的数据。 这个过程花了 40 分钟,我把存储过程放在后端,让它从前端调用;页面在三秒钟内加载完毕。...所以,最后的查询是: SELECT rows from sysindexes where object_name(id)='T1'and indexid =1 在我 2.7 亿行的表中,不到 1 秒就返回结果

    1.1K60

    不要再问我 in,exists 走不走索引了...

    如若不然,就会导致 not in 返回的整个结果集为空。 例如,我在 t2 表中加入一条 name 为空的数据。...我这里,用的是自定义函数来循环插入,语句参考如下,(没有把表名抽离成变量,因为我没有找到方法,尴尬) -- 传入需要插入数据的id开始值和数据量大小,函数返回结果为最终插入的条数,此值正常应该等于数据量大小...1 ? 2 ? 3 ? 4 可以发现,对于 in 来说,大表 t2 做外表还是内表,都会走索引的,小表 t1 做内表时也会走索引。看它们的 rows 一列也可以看出来,前两张图结果一样。...join 的嵌套循环 (Nested-Loop Join) 为了理解为什么这里的 in 会转换为 join ,我感觉有必要了解一下 join 的三种嵌套循环连接。...1、简单嵌套循环连接,Simple Nested-Loop Join ,简称 SNLJ join 即是 inner join ,内连接,它是一个笛卡尔积,即利用双层循环遍历两张表。

    2K20

    【译】antirez:Redis6将支持客户端缓存

    key空间被分割到”caching slots“,但他们比Ben使用的hash slots要多得多。我们使用CRC64的24位输出,所以有超过1600万个不同的slot。为什么这么多呢?...因为我认为你想要有一个1亿key的服务器。然而一个失效信息影响的key不应该多于客户端缓存中的key。Redis中失效表占用130M的内存:8字节的指针指向16M的条目。...客户端使用“opt in”方法开启这个功能,只需要一个简单的命令: CLIENT TRACKING on 服务器总是返回+OK,从这时起,每个命令都在命令表中被标记为“只读”,不再给调用者返回keys...保存这种信息时非常简单的,每个Redis客户端都有自己的唯一ID,所以如果ID是123的客户端发送了MGET命令,需要从slot 1,2和5获取key,那么失效表中我们就需要记录如下信息: 1 -> [...我希望这足以刺激你的胃口:如果我们在Redis中运行的很好,然后记录下来,让客户端作者知道该如何支持,数据可能比以往更接近应用程序,甚至在小型团队运行的应用程序中,到目前为止还没有尝试客户端缓存。

    74320

    数据库优化 6. 启用MySQL查询缓存

    这个步骤, 能够得出的结论是, 我的这个sql语句使用了缓存, 缓存字段是product_id, 但是并没有显示出为什么会这么慢 3....这里的关键是为什么要收集数据,原因在于:mysql使用“索引”完成查询结束后,mysql得到了一堆的行id,如果有的列并不在索引中,mysql需要重新到“数据行”上将需要返回的数据读取出来返回个客户端。...这次让我对jpa的用法有了一个更深刻的认识 JPA的用法总结: 1. 使用起来非常方便, 内部定义了很多配合方法, 简化sql. 2....使用的是单表查询, 单表查询比连表要快很多, 查询出来以后, 将业务逻辑在代码里拼接, io消耗比与数据库交互少很多. JPA使用注意事项: 1....我这个问题就是, 查询出来了所有的数据, 9万条啊, 然后使用stream分组, 分组后去size, 这个操作在数据库一个sql就完事, 用时不到1秒. 可把所有数据查出来, 竟然用了68秒.

    2.1K30

    Hive提高查询效率的八条军规

    大家好,我是一哥,今天分享一下Hive如何提升查询效率。...实际分析中,常常使用少数几个字段将原始的表中数据,依据业务需求提取出要分析的字段,数据放入到对应的业务表(子表)中,实际的业务针对业务表进行分析。...join 优化: Common/shuffle/Reduce JOIN:连接发生的阶段,发生在reduce 阶段,适用于大表连接大表(默认的方式) Map join :连接发生在map阶段,适用于小表连接大表...大表的数据从文件中读取;小表的数据存放在内存中(hive中已经自动进行了优化,自动判断小表,然后进行缓存)。...在一个桶内发送生笛卡尔积连接(需要是两个桶表进行join) set hive.auto.convert.sortmerge.join=true; set hive.optimize.bucketmapjoin

    1.2K30

    Web | Django 与数据库交互,你需要知道的 9 个技巧

    在本文中,我将分享在 Django 中使用数据库的 9 个技巧。 1....在大多数 Django 应用程序中,大部分时间都花在等待数据库查询上了。所以,在 SQL 查询上设置超时是一个很好的开始。...因为这样它只会影响工作进程,不会影响进程外的分析查询,cron 任务等。 希望您使用的是持久的数据库连接,这样每次请求都不会再有连接开销。...我们限制某一个查询的返回不超过 100 行数据: # bad example data = list(Sale.objects.all())[:100] 这很糟糕,因为虽然只返回 100 行数据,但是其实你已经把所有的行都取出来放进了内存...我也没有。(作者好萌) 我们有一些晚上运行的 ETL 进程,主要是在产品和用户表上做维护。这些 ETL 操作会更新字段然后插入表,这样它们也会获得了表的锁。 那么问题是什么?

    2.9K40

    一条半连接SQL的优化过程

    OWNER" 而他的执行计划,是哈希内连接, 我们看下a和b连接列的数据分布情况,a表owner列统计, b表owner列统计(其实和a相同), 因为用的内连接,owner='SYS'这条数据关联得到的结果集...如果半连接中主表属于1的关系,子表(子查询中的表)属于n的关系,改写内连接时,需要加上group by去重,此时半连接性能高于内连接。 2....如果半连接中主表属于n的关系,子表(子查询中的表)属于1的关系,改写内连接时,不需要去重,此时半连接和内连接性能相同。 3....半连接的表关联得到的数据量不应该翻番,而内连接得表关联得到得数据量可能翻番。...原始SQL被改写为哈希内连接,没做去重,而且确实存在owner='SYS'这种关联数据量很大的情况,因为数据量大,执行时间就会相应增加。

    78820
    领券