left join 右表多条数据重复

mysql的left join从两个表中联合查询数据,以左表为主,右表为辅。如果左表中有的内容右表中没有,则用null填充。这是一般的常见的解释。也很容易理解。但是在做右表的多数据查询的时候就得写条件了。

我写一个产品-产品图片的分页过程中需要查出一个图片即可。但是在用mysql的left join中,左表为product,键为pid。右表为image主键为imageid,外键为pid。

查询语句入下

select product.* from product left join image using(pid);

当输出结果时发现,当一个产品数据对多个图片数据时,产品会出现重复。这就是遇到的麻烦,查询网络上有人有这样的问题,

但是都是通过分步来解决,即查询完毕产品数据,然后循环的时候再进行图片查询并查询1个输出。

我想了半天,采用了另一种方法解决,left join 右表多条数据的情况,根据上面的我写了如下sql语句

select product.*,foraspcn.image from product left join(select imagename,pid from image group by pid) as foraspcn

using(pid);

这样查询出来就是一个产品对应一个图片

即,在查询右连接的表时,查询的就是1条数据,通过groupby 来进行数据检索。当然这样的group by 是说不准查出那条来的。

我就是这样解决的。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed

原文地址:https://www.cnblogs.com/sjwudhwhhw/p/10156942.html

时间: 2024-10-07 18:54:12

left join 右表多条数据重复的相关文章

SQL server基础知识(表操作、数据约束、多表链接查询)

SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database 数据库名称 查询:select name from master..sysdatabases 修改:alter database 数据库名称(在 sql server 中修改与数据库关联的文件和文件组.在数据库中添加或删除文件和文件组.更改数据库或其文件和文件组的属性) (3).管理表 选择数据库:use 数

oracle 分页查询数据重复问题

最近在做项目的时候发现一个问题,oracle 在查询分页数据的时候,有几条数据重复查询了,并且有几条数据在分页的时候消失了.百度了一下发现,ORACLE 在查询数据的时候返回的行不是固定的,他只是按照顺序从数据中读取符合条件的数据返回到客户端,给用户误解为默认排序. 然而,当我加上排序的时候,还是查询有重复的数据,(指第一页数据在第二页也查询出来了),这是我就疑问了,当我检查数据的时候,发现我排序的字段有空的情况,而且有很多条,导致排序返回的 伪列并不是唯一的. 总结: oracle 分页查询数

关于sql server远程访问Oracle数据库 OpenQuery查询返回多条数据的问题

在Sql Server远程访问Oracle 中的数据库表时: 远程语法通常为: select * from OpenQuery(Oracle链接服务器名称,‘查询语句’) eg: select * from OPENQUERY(QTX,'select * from student') 有些情况下只会返回student表一条数据 第一条 解决方法:数据源ODBC中 选择系统DNS 时,新建系统数据源 选择的对应驱动应该为Oracle Instant Client Dricver  这个驱动需要安装

EF6 AddOrUpdate之后,数据没有改变而是新增了一条数据解决办法

EF:修改不是查询出来的对象dbContext.Web_User.AddOrUpdate(user);dbContext.SaveChanges(); 上面的写法有时候可能不起作用,而且把这条数据重复的添加了一遍.解决的办法是给它指定一下主键.//EF密码不能修改,是因为加了这个this.HasKey(t => new { t.ID, t.Name,t.Password});

DataTable相关操作,筛选,取前N条数据,去重复行,获取指定列数据

#region DataTable筛选,排序返回符合条件行组成的新DataTable或直接用DefaultView按条件返回      /// <summary>      /// DataTable筛选,排序返回符合条件行组成的新DataTable或直接用DefaultView按条件返回      /// eg:SortExprDataTable(dt,"Sex='男'","Time Desc",1)      /// </summary>

【Transact-SQL】SQL Server自动把left join自动转化为inner join、以及关联时的数据重复问题

原文:[Transact-SQL]SQL Server自动把left join自动转化为inner join.以及关联时的数据重复问题 1.SQL Server自动把left join自动转化为inner join的问题: 下面的两个语句都是left join的,但是一个却转化成了 inner join drop table a,B go create table a(id int) insert into a select 1 union all select 2 create table b

定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据?

原文:http://www.iteye.com/problems/77856 定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据? 表结构肯定是不能破坏,但是临时表如果是自己的数据库还行,问题是这个Oracle数据库是客户的数据库呢,你不能在他的数据库做任何多余的操作吧?还有别的更好的方法吗? 这个真的是比较困难. 首先,你要从客户机oracle取数据,因为这1分钟间隔之内不知道用户机新增加了哪些数据(大部分情况下是用户使用别的系统插入数据,而你又没有这个系统的程序接口

Sql server的Merge语句,源表中如果有重复数据会导致执行报错

用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说明这个问题. 现在我们有一张表叫T_Class_A,其建表语句如下: CREATE TABLE [dbo].[T_Class_A]( [ID] [int] IDENTITY(1,1) NOT NULL, [ClassName] [nvarchar](50) NULL, [StudentTotalCo

删除oracle表中的完全重复数据

今天数据库除了个问题:项目中的一张表,数据是从另外一个系统中相同的表里弄过来的,但是可能由于昨天同事导数据导致我这张表中的数据出现了完全相同的情况(所有字段),全部是两条,需要删除相同的数据. 做法:1.创建中间表, 2.将原表中的不重复数据放入中间表, 3.删除原表数据 4.将中间表数据放入原表 5.删除中间表 --创建中间表 CREATE TABLE ATT_SCATTER_REQ_NUM_TEMP AS (SELECT distinct * FROM ATT_SCATTER_REQ_NUM