inner join 重复数据(mysql数据库里只有一条数据为什么查询出来有两条重复的数据)
本文目录
- mysql数据库里只有一条数据为什么查询出来有两条重复的数据
- pg数据库的db怎么查看表关联
- ABAP问题 我想问下为什么我用inner join 关联表的时候为什么取出的数据会进行循环
- 为什么我在sql查询语句中用inner join联合查询 会出现双倍的数据
- 数据库左连接、右连接、内连接、全连接
- sql 中left join后怎么去除重复数据
- 查询一个表中的两个字段值相同的数据
- sql中使用两个join后出现了每行记录重复大约九次的情况
mysql数据库里只有一条数据为什么查询出来有两条重复的数据
inner join 会兼顾两张表,应该是你另一个表里面那个主键的数据有两条;;;先确定主表,用left join 或者right join 就会只有一条了
pg数据库的db怎么查看表关联
一、数据库的多表连接查询,inner的不同用法
在pg数据库中建立两张表:
t_a和t_b如下所示:
t_a:
t_b:
1、inner join(内连接)
inner join就是根据on字段标示出来的条件,查询关联的表中符合条件的数据,并把他前部都显示出来,形成一个结果集。
执行如下语句:
select * from t_a inner join t_b on t_a.adi=t_b.bid
得到的结果为:
这样的查询会显示出所有的数据,如果我们仅仅需要一部分的数据(例如我们只想查出t_a中所有aid和t_b中的bid相同的数据),那么查询语句应该变成:
select t_a.* from t_a inner join t_b on t_a.aid=t_b.bid
那么得到的数据如下所示,就只显示了t_a表中的数据。如下:
要排除重复的数据,在select后加distinct即可。
2、left join
left join 就是以表t_a为基础从右表t_b中查询出所有符合on条件的结果,在合并到表t_a中对应的部分,再作为一个结果集输出,在结果集中,会显示出表t_a中的所有数据。
执行如下查询语句:
select * from t_a left join t_b on t_a.aid=t_b.bid
得到如下结果:
可以看到,在查询的结果中,有一行关于表t_b的数据都为null,因为表t_b中没有符合on条件的数据。但是表t_a表显示出了全部的数据。那么在需要筛选的时候,应该着重于筛选表t_b中的数据,如果执行如下的语句:
select t_a.* from t_a left join t_b on t_a.aid=t_b.bid
那么得到的就是表t_a中的所有数据,那么这个查询就显得没有意义了。
3、right join
right join 就是以表t_b为基础从左表t_a中查询出所有符合on条件的结果,在合并到表t_b中对应的部分,再作为一个结果集输出,在结果集中,会显示出表t_b中的所有数据。
执行如下查询语句:
select * from t_a right join t_b on t_a.aid=t_b.bid
得到的结果为:
可以看到,查询的结果中,有两行数据在表t_a的对应部分都是null的,表示表t_a中没有符合on条件的数据,但是表t_b显示了全部的数据,那么需要做条件筛选的时候,我们就应该主要针对表t_a进行筛选。
二、查询一个父级的所有子级(包括子级的子级)
在pg数据库中建立一张表t_c如下:
要查出cid为1的所有的子级、包括cid为2、3、5的子级的集合。执行以下sql语句
with recursive tb as(select * from t_c where parent_id=’1’ union all select t_c.* from t_c,tb where t_c.parent_id=tb.cid )select * from tb
得到如下的结果:
由查询出的结果集可以看到,我们查询出了除了父级(cid为1)以外的所有cid为父级的子级以及子级的子级。
我们来解析一下这个sql语句:
显而易见的,这是一个递归的查询方法。首先是with为查询语句提供了辅助功能,可以看做是查询语句中的临时表,其次recursive是sql中递归的关键字,只有有了这个关键字,pg才知道with这个语句需要做递归操作。union all是去重的,t_c.parent_id=tb.cid 表示了t_c的parent_id要等于临时表tb的cid要在整个with语句的外面查询建立的临时表tb,才能得到所有的子级的集合。
ABAP问题 我想问下为什么我用inner join 关联表的时候为什么取出的数据会进行循环
FROM ekko
INNER JOIN ekbe ON ekko~ebeln = ekbe~ebeln
EKBE和EKKO用EBELN连接的话,是一对多关系,所以会有重复记录出现。
为什么我在sql查询语句中用inner join联合查询 会出现双倍的数据
A表 ca cb B表 cc cd
1 b 1 d
2 bb 1 dd
3 bbb 2 ddd
3 dddd
select * from a表 inner join b表
结果会是 1 b 1 d
1 b 1 dd
2 bb 2 ddd
3 bbb 3 dddd
因为你 a表与b表关联的字段,在a表或者b表中存在多条,所有会多出现好多条
数据库左连接、右连接、内连接、全连接
1.INNER JOIN (内连接)
内连接是一种一一映射关系,就是两张表都有的才能显示出来
SELECT A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value
FROM table_a A
INNER JOIN table_b B
ON A.PK = B.PK;
2.LEFT JOIN (左连接)
左连接是左边表的所有数据都有显示出来,右边的表数据只显示共同有的那部分,没有对应的部分只能补空显示,所谓的左边表其实就是指放在left join的左边的表
用韦恩图表示如下:
SELECT A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value
FROM table_a A
LEFT JOIN table_b B
ON A.PK = B.PK;
3.RIGHT JOIN(右连接)
右连接正好是和左连接相反的,这里的右边也是相对right join来说的,在这个右边的表就是右表
用韦恩图表示如下:
SELECT A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value
FROM table_a A
RIGHT JOIN table_b B
ON A.PK = B.PK;
4.OUTER JOIN(外连接、全连接){mysql不支持外连接}
查询出左表和右表所有数据,但是去除两表的重复数据
韦恩图表示如下:
SELECT A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value
FROM table_a A
FULL JOIN table_b B
ON A.PK = B.PK;
悬浮元组:
在自然连接中,被舍弃的元组被称为悬浮元组
1、 左连接
是已左边表中的数据为基准,若左表有数据右表没有数据,则显示左表中的数据右表中的数据显示为空。左联接的结果集包括 LEFT 子句中指定的左表的所有行,而不仅仅是联接列所 匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
2、 右联接
是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值
3 全连接:
是返回两个表中的所有的值,没有对应的数据则输出为空。
内连接
等值连接
非等值连接
自链接
外连接
左外连接
右外连接
全外连接
交叉连接
sql 中left join后怎么去除重复数据
left\right join是外部连接,inner join是内连接
外部连接有主表与从表,主表在left中是左侧表,right中是右侧表,主表数据会全部显示,从表数据则只显示关联部分匹配的数据,无匹配的数据用null补全
内连接则只显示两表关联条件匹配的数据
注:所谓关联条件即是指on的条件
查询一个表中的两个字段值相同的数据
select LinkUser.* from LinkUser INNER JOIN (SELECT Lname,UserName from LinkUser group by Lname,UserName having count (*)》1) AS B ON LinkUser.Lname =B.Lname AND LinkUser.UserName=B.UserName ORDER BY LinkUser.UserName
SELECT Lname,UserName from LinkUser group by Lname,UserName having count (*)》1 --先找到表中两个字段(Lname,UserName)都一样的值,虚拟成B表,
通过内链接(INNER JOIN)把LinkUser表中两个字段(LinkUser.Lname)都一样的值的数据都查询出来,并按UserName的顺序排列(ORDER BY LinkUser.UserName)。
注意:Lname,UserName两个字段中有NULL时,内链接(INNER JOIN)中inkUser.Lname =B.Lname AND LinkUser.UserName=B.UserName 不成立,因为两空值是不等的。但在SELECT Lname,UserName from LinkUser group by Lname,UserName having count (*)》1的语句中的结果NULL值认定为重复。
sql中使用两个join后出现了每行记录重复大约九次的情况
select 11月考勤表.name as 姓名,
员工表.card as 卡号,
11月考勤表.bmmc as 部门,
11月考勤表.skrq as 刷卡日期,
11月日历.weeks as 星期,
11月考勤表.sksj as 刷卡时间
into monthdata
from 11月考勤表 inner join 11月日历 on kqrq=skrq join 员工表 and 11月考勤表.no=员工表.no
where skrq between ’2007-11-01’ and ’2007-11-30’
在join 前加个inner
在只有join的情况下,被认为是full join ,也就是笛卡尔积了,所以会重复N多数据.
更多文章:
inner join 重复数据(mysql数据库里只有一条数据为什么查询出来有两条重复的数据)
2026年3月27日 22:00
ideal是什么意思中文(ideal和idea的区别是什么)
2026年3月27日 21:40
numpy安装了无法运行(python中numpy库中的matplotlib不能运行)
2026年3月27日 21:00








