sql查询:查询两张表的时候,左表的一条记录对应了右表的两条相同数据怎么显示一条记录?

例如:
a表

id name

1 张三

b表

id a_id

1 1

2 1

select a.*,b.* from a inner join b on a.id=b.a_id

怎么让查询出来的结果只有一条记录显示?

sql

7个回答

你要不就设置id为主键不可以重复 要不select 后面使用 distinct 关键字去重

qq_42136251
小白zx编程 回复luckyxs: 嗯嗯,谢谢您
一年多之前 回复
Adorable_0623
luckyxs 回复小白zx编程: 嗯 也可以用group by 分组去重 只要能实现去重就行啦 =w=
一年多之前 回复
qq_42136251
小白zx编程 回复:我刚才用这种方式加个group by 就可以
一年多之前 回复
qq_42136251
小白zx编程 select a.name from b,a where a.id=b.a_id select a.name from b,a where a.id=b.a_id group by a.name
一年多之前 回复

用left join试试

qq_42136251
小白zx编程 回复初冬灬淡愁彡: 嗯好,我去试试,谢谢您
一年多之前 回复
u013404615
初冬灬淡愁彡 回复小白zx编程: 嗯,解决就好,也可以试试distinct去重
一年多之前 回复
qq_42136251
小白zx编程 用left join还是能出来两条的,加上group by就可以了
一年多之前 回复

select top 1 a.*,b.* from a inner join b on a.id=b.a_id

a表
id name
1 张三
b表
id a_id
1 1
2 1

select a.name from b,a where a.id=b.a_id 结果两条记录

select a.name from b,a where a.id=b.a_id group by a.name 一条记录

select a.name from b left join a on a.id=b.a_id group by a.name 一条记录

group by:group by一般用于对数据集进行分组然后多组内多行数据的其他字段进行比如计算行数,计算最大值最小值的操作

很简单,用distinct 语句就行了,

qq_42136251
小白zx编程 嗯嗯,distinct和group by 都可以实现的,谢谢您
一年多之前 回复

图片说明

你的例子呢,我能明白你的意思,但是你的例子说明的还不全面。我相信你例子中的b表还有很多其他的字段。我大体和你说一下你还需要了解
的数据信息,才能真正实现目的。
你的a表可以确定,粒度就是就是你a表的id字段。你的b表粒度,肯定和a表不同,既然出现多条,我猜应该是比a表的粒度要小。
这就好比你的a表是学生的基本信息表,id类似于学号;而你的b表呢就相当于考试成绩表,里面不止有学号,还有各科对应的成绩,也就是说
一个学号会对应多条学科成绩。
所以,如果你想用学生的信息表(也就是你的a表)关联你的成绩表(b表),那么同样的,也是多条记录,因为关联完之后的数据就是一个学号
对应多科成绩了,是这样粒度的数据了。如果你想得到一条,那么肯定还需要其他的条件,比如说我只想要每个学生的语文成绩,那么你在b表
上限制条件,再关联,肯定就不是多条记录了。
所以,你还需要知道关于你b表,还有哪些条件限制的要求,如果b表里有时间类型的字段,会不会有取最大时间这样的限制?或者说是不是有
需要把每个id下面的某个指标sum?这样的要求,你还需要确认。

qq_42136251
小白zx编程 嗯嗯,了解了,谢谢您
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐