sql 一对多关系随机查一条

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 一对多关系随机查一条相关的知识,希望对你有一定的参考价值。

数据格式如下
A表对应B表有N条记录
A表 B表
A a1
A a2
B b2
C c1
C c2
怎样查询出A表中的记录并关联B表中的记录,要求B表中随机一条记录关联A表
详细的描述下需求,A表中对应的是打分员,B表是打分员对学生打分的记录,现在是要抽查打分员的打分情况,每个打分员只抽一个学生(随机).用SQL能实现吗?

select NewID,ID from B where ID in (select distinct A.ID from A) order by NewID
或者
select NewID,A.*,B.* from (select A.*,B.* from A inner join B on A.ID =B.AID ) order by NewID

仅供参考。以ID做关联。
参考技术A select top 1 a.A,b.a1 from A as a,B as b where a.A=b.A order by newid()
希望能帮到你!
参考技术B select a.A,b a1 from A a,B b where a.A=b.A追问

这样连接查出来的数据就会出现
A--a1
A--a2
B--b2
C--c1
C--c2
,我要的结果是
A--a1 或A--a2
B--b2
C--c1或C--c2
A表只要求B表随机一条记录关联

追答

select distinct a.A,b a1 from A a,B b where a.A=b.A 这样行不

使用 QueryDSL SQL 映射一对多关系

【中文标题】使用 QueryDSL SQL 映射一对多关系【英文标题】:Mapping one-to-many relationship using QueryDSL SQL 【发布时间】:2013-04-25 13:39:54 【问题描述】:

假设我有这两个 bean 实体:

public class Audit 

   private String code;

    private java.sql.Timestamp creationDate;

    private String creatorId;

    private java.sql.Timestamp deletionDate;

    private String description;

    private String id;

    private String name;

    private String notes;

    private Short status;

    private List<AuditParticipant> participants;

和:

 public class AuditParticipant 

    private String auditId;

    private String department;

    private String id;

    private String name;

    private String notes;

    private String role;

    private String surname;

...Audit 可以有 1..n Participants,如何使用 QueryDSL SQL 将参与者列表投影到 Audit bean(获取属于审计的所有参与者)?

bean 是使用 QueryDSL 代码生成生成的。

谢谢

【问题讨论】:

【参考方案1】:

Querydsl 为此类情况提供结果聚合功能http://www.querydsl.com/static/querydsl/3.1.1/reference/html/ch03s02.html#d0e1634

在这种情况下,它会是这样的

query.from(audit)
     .innerJoin(participant).on(...)
     .transform(groupBy(audit.id).as(audit, list(participant)));

查看这些示例以了解其他 groupBy 选项https://github.com/mysema/querydsl/blob/master/querydsl-collections/src/test/java/com/mysema/query/collections/GroupByTest.java

【讨论】:

以上是关于sql 一对多关系随机查一条的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis关于多表联查 关联关系之一--------一对多(单条sql语句查询)

数据库表与表之间的一对一对多多对多关系

Laravel - 以一对多关系获取最后一条记录

选择一对多关系中的最后一条记录

使用左连接选择一对多关系中的第一条记录

SQL一对多特殊查询,取唯一一条