小白zx编程
2019-03-05 11:04
采纳率: 80%
浏览 3.2k

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • luckyxs 2019-03-05 11:25
    已采纳

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

    点赞 打赏 评论
  • 初冬灬淡愁彡 2019-03-05 11:30

    用left join试试

    点赞 打赏 评论
  • kingsoft50505050 2019-03-05 11:34

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

    点赞 打赏 评论
  • 小白zx编程 2019-03-05 11:47

    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一般用于对数据集进行分组然后多组内多行数据的其他字段进行比如计算行数,计算最大值最小值的操作

    点赞 打赏 评论
  • meyou888 2019-03-05 11:52

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

    点赞 打赏 评论
  • 里约儿 2019-03-05 13:14

    图片说明

    点赞 打赏 评论
  • have_power 2019-03-05 14:22

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

    点赞 打赏 评论
  • wrzs 2020-12-01 15:25

    distinct,group by ,rownumber over 等都可以解决你这个问题。

    点赞 打赏 评论

相关推荐 更多相似问题