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

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

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

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

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

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

相关·内容

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

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

72110

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

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

1.1K20
  • 设计与死锁,及为什么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 优化器采集数据更准确。

    85430

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

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

    8010

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

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

    56811

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

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

    12110

    SQL未来:会话式解决问题

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

    10010

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

    前言 SQL Server 2008 R2如何开启数据远程连接 SQL Server 2008默认是不允许远程连接,如果想要在本地用SSMS连接远程服务器上SQL Server 2008,远程连接数据库...需要做两个部分配置: 1SQL 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,远程连接数据库。...需要做两个部分配置: 1SQL 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分钟就能得出结论.

    19420

    小黑盒和长亭科技面经

    这是通过两种带技术完成: ● 基于错误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 秒就返回结果

    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 ,连接,它是一个笛卡尔积,即利用双层循环遍历两张

    1.9K20

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

    key空间被分割到”caching slots“,但他们Ben使用hash slots要多得多。我们使用CRC6424位输出,所以有超过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中运行很好,然后记录下来,让客户端作者知道该如何支持,数据可能以往更接近应用程序,甚至在小型团队运行应用程序中,到目前为止还没有尝试客户端缓存。

    73820

    数据库优化 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

    一条半连接SQL优化过程

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

    77720

    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.8K40
    领券