多表查询去除重复记录

多表查询去除重复记录

首先关于sql  多表查询去除重复记录我们就可以想到用group by 或distinct 再着想到inner left 等,
下面来看看个实例

看一个distinct 实例

现在将完整语句放出:

select *, count(distinct name) from table group by name

结果:

   id name count(distinct name)
   1 a 1
   2 b 1
   3 c 1

最后一项是多余的,不用管就行了,目的达到。。。。。

group by 必须放在 order by 和 limit之前,不然会报错

db_a:
id    age
1      20
2       30
3      40
4       50
db_b:
topid      poto
  2           axxxxxxxxxx
  2           bxxxxxxxxxx
  2           cxxxxxxxxxxx
  3           dxxxxxxxxxxx

SELECT * FROM db_a AS A LEFT JOIN db_b AS B ON B.topid=A.id;

现在查询出来有6条数据, 怎么解决.

SELECT * FROM db_a AS A RIGHT JOIN db_b AS B ON B.topid=A.id;
//四条数据。是你要的吗
id  age  topicid  poto 
2 bbbbbb 2 axxxxx
2 bbbbbb 2 bxxxxxx
2 bbbbbb 2 cxxxxx
3 cccccc 3 dxxxxxx

SELECT * FROM db_a AS A, db_b AS B WHERE B.topid = A.id

select distinct(列名) from 表
找出这个表中,这个列里,不重复的值出来
distinct(列名)

SELECT * FROM db_a AS A INNER JOIN db_b AS B ON A.id = B.topid;

SELECT * FROM db_a AS A left JOIN db_b AS B ON A.id = B.topid goup by a.id;

另外更多方法

方法一:用union

select a.menuId, menuAliasNumber, menuName1, menuName2 ,
(select price from workmenuPrice where workmenuPrice.menuId=a.menuId and menuPriceTypeId=1) as 'reg',
(select price from workmenuPrice where workmenuPrice.menuId=a.menuId and menuPriceTypeId=2) as 'large',
(select price from workmenuPrice where workmenuPrice.menuId=a.menuId and menuPriceTypeId=3) as 'small'
from workmenuItems a right join workmenuCatUse b on a.menuId=b.menuId
right join workmenuPrice c on c.menuId=b.menuId
union
select a.menuId, menuAliasNumber, menuName1, menuName2 ,
(select price from workmenuPrice where workmenuPrice.menuId=a.menuId and menuPriceTypeId=1) as 'reg',
(select price from workmenuPrice where workmenuPrice.menuId=a.menuId and menuPriceTypeId=2) as 'large',
(select price from workmenuPrice where workmenuPrice.menuId=a.menuId and menuPriceTypeId=3) as 'small'
from workmenuItems a right join workmenuCatUse b on a.menuId=b.menuId
right join workmenuPrice c on c.menuId=b.menuId

方法二:用distinct

select distinct(a.menuId), menuAliasNumber, menuName1, menuName2 ,
(select price from workmenuPrice where workmenuPrice.menuId=a.menuId and menuPriceTypeId=1) as 'reg',
(select price from workmenuPrice where workmenuPrice.menuId=a.menuId and menuPriceTypeId=2) as 'large',
(select price from workmenuPrice where workmenuPrice.menuId=a.menuId and menuPriceTypeId=3) as 'small'
from workmenuItems a right join workmenuCatUse b on a.menuId=b.menuId
right join workmenuPrice c on c.menuId=b.menuId

时间: 2025-01-27 15:08:29

多表查询去除重复记录的相关文章

解析mysql中:单表distinct、多表group by查询去除重复记录

单表的唯一查询用:distinct 多表的唯一查询用:group bydistinct 查询多表时,left join 还有效,全连接无效, 在 使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来返回不重复记录的所有值.其原因是distinct只能返回它的目标字段,而无法返回其它字段,用 distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据

解析mysql中:单表distinct、多表group by查询去除重复记录_Mysql

单表的唯一查询用:distinct多表的唯一查询用:group bydistinct 查询多表时,left join 还有效,全连接无效,在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重复记录的所有值.其原因是distinct只能返回它的目标字段,而无法返回其它字段,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的

SQL查询重复数据与去除重复记录语句

例如:查询重复2次的数据并列出  代码如下 复制代码 select * from park_room where parkNum in ( select parkNum from park_room group by parkNum having count(parkNum) > 1 ) order by parkNum字段信息说明: park_room--停车位表 parkNum--车位号 例子 去除重复记录  代码如下 复制代码 SELECT COUNT(distinct parkNum)

删除没有主键的表中的重复记录

删除没有主键的表中的重复记录 create procedure delrepeat as begin SELECT distinct *  INTO testTemp FROM test delete from test insert into test SELECT *  FROM testTemp drop table testTemp end distinct:用于查询中去除重复项 begin~end范围语句表示存储过程中作为整体执行的语句块 oracle数据库教程 delete from

sql 去除重复记录的语句

sql 去除重复记录的语句 表A: ID,Name 表B: ID,AID,Value   select case when a.name='ccc' then null else a.name end name,b.value from 表A a,表B b where a.ID=b.AID select nullif(a.name,'ccc') name ,b.value from 表A a,表B b where a.ID=b.AID 生成测试数据表: [tb] IF OBJECT_ID('[t

删除数据表中的重复记录

数据|重复|重复记录 删除交通违章数据表中的重复记录(同一时间[haptime].车号牌[numberplate].处罚原因[reason])一.方法原理:  1.Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的, rowid确定了每条记录是在ORACLE中的哪一个数据文件.块.行上. 2.在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除. 二.实现方法:1.查询重复记录select

sql去除重复记录问题,要求只用一条select语句

问题描述 sql去除重复记录问题,要求只用一条select语句 我有个表,有些记录属于部分重复,像根据时间去掉重复记录比如这个表: t1 t2 小明 2015-06-25小明 2015-09-21小红 2015-03-01小花 2015-03-01小白 2015-03-01 里面的小明那条记录,我只想保留2015-09-21这条最新的记录. 麻烦的是,我只能用一条select语句,不能把另一条记录删掉.求解 解决方案 SELECT a.* FROM table1 a WHERE NOT EXIS

excel中去除重复记录公式

品 编码(把编码为1的统计  出来)       A01 1             A02 1             A03 0             A01 0             A05 1             A01 1             A05 0             A03 0                 要求:          把B列中值为1的,A列中不重复的值 的总数统计出来                             满足这个要求的值是:

Oracle 查询与删除表中的重复记录sql语句

方法:  代码如下 复制代码 group by  XX having count(*)>1,rowid,distinct,temporary table,procedure 下面语句可以查询出那些数据是重复的:  代码如下 复制代码 select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1 将上面的>号改为=号就可以查询出没有重复的数据了. 想要删除这些重复的数据,可以使用下面语句进行删除  代码如下 复制代