当前位置: 首页 > 面试题库 >

细数一对一的关系

澹台景辉
2023-03-14
问题内容

我在执行查询时遇到问题。我想做的是通过MyDomainB的查询来查询MyDomainA中“字符串代码”中的数据。表之间的关系是单向一对一的。

可以使用gorm方法来做到这一点吗?

域A:

class LicenceType {

    String code
    String description
    Double price

    static constraints = {
    }

}

表域A

code description
A    this is A
B    this is B
C    this is C

域B :(具有单向关系)

class VoiceUser {

LicenceType licenceType

String username
String email
String nameID

}

表域B

User 
1    
2    
3    
4

我想做的是知道有多少用户具有相同的代码(代码是DomainA的一列,并且两个表都具有我之前指出的单向关系)。

这是我正在尝试这样做是错误的…控制器:

        def resulta = VoiceUser.executeQuery('SELECT a.code, COUNT(b.nameID) FROM VoiceUser AS b INNER JOIN b.licenceType AS a GROUP BY a.code')

def resultCount = resulta[0]

我希望这是一些示例结果…

Users with code A = 2
Users with code B = 2
Users with code C = o

问题答案:

诀窍是在上执行group bycode然后在count()上执行user。您可以使用HQL或条件查询来执行此操作。

这是HQL中的一个示例:

VoiceUser.executeQuery('SELECT licence.code, COUNT(user) FROM VoiceUser AS user INNER JOIN user.licenceType AS licence GROUP BY licence.code')

如果您熟悉SQL,那么其中大多数应该马上就有意义。一个重要的区别是加入域类的语法。HQL处理域类,而不处理表。

条件查询

这是等效条件查询。

VoiceUser.withCriteria {
    projections {        
        licenceType {
            groupProperty('code')
        }

        count('id')
    }
}

替代查询

上面显示的查询返回List<List>如下所示:

[
    ['A', 2], 
    ['B', 2], 
    ['C', 0]
]

如果您提供一个LicenceType(或它的代码)作为查询的输入,那么您就可以得到那个的计数LicenceType。例如,以下示例检索许可证代码“
A”的用户计数。

高品质

def result = VoiceUser.executeQuery('SELECT COUNT(user) FROM VoiceUser AS user INNER JOIN user.licenceType AS licence WHERE licence.code = :code', [code: 'A'])[0]

条件查询

def result = VoiceUser.createCriteria().get {
    licenceType {
        eq('code', 'A')
    }

    projections {        
        count('id')
    }
}


 类似资料:
  • 让我们来理解MS Access中的一对一关系。 这种关系用于将一个表中的一条记录与另一个表中的一条记录相关联。 现在转到 数据库工具 选项卡。 点击关系 选项。然后选择和,然后单击添加按钮将它们添加到视图中,然后关闭显示表格对话框。如下图所示 - 要创建这两个表之间的关系,请使用鼠标,然后单击并按住Employees 中的字段,然后将该字段拖放到要关联的字段上,方法是将鼠标悬停在tblHRData

  • 问题内容: 我正在尝试在MySQL数据库中实现“一对一”的关系。例如,假设我有一个Users表和一个Accounts表。我想确保一个用户只能拥有一个帐户。每个用户只能有一个帐户。 我找到了两个解决方案,但是不知道该使用什么,还有其他选择。 第一个解决方案: 在此示例中,我在指向用户主键的帐户中定义外键。然后,我使外键成为唯一键,因此帐户中不能有两个相同的用户。要联接表,我将使用以下查询: 第二种解

  • 我试图在MySQL数据库中实现“一对一”的关系。例如,假设我有一个Users表和一个Accounts表。我想确保一个用户只能有一个帐户。每个用户只能有一个帐户。 我找到了两个解决方案,但不知道该用什么,还有其他的选择。 在本例中,我定义了指向用户中主键的帐户中的外键。然后我使外键唯一,所以帐户中不能有两个相同的用户。要联接表,我将使用以下查询: null 如果我将这些解决方案中的任何一个导入到My

  • 本文向大家介绍一对一、一对多的关联查询 ?相关面试题,主要包含被问及一对一、一对多的关联查询 ?时的应答技巧和注意事项,需要的朋友参考一下

  • 比如我们有一个用户表,另外有一个个人资料表,他们之间的关联就是一对一的关系。 定义 一对一关联会用到的注解: @OneToOne、@JoinFrom、@JoinTo、@AutoSelect、@AutoInsert、@AutoUpdate、@AutoSave、@AutoDelete 如 imi-demo 中代码所示,定义了一个$ex属性,这个属性关联UserEx模型。 User中id与UserEx中

  • 一对一关联 版本 新增功能 5.1.2 增加selfRelation方法定义当前关联为自关联 关联定义 定义一对一关联,例如,一个用户都有一个个人资料,我们定义User模型如下: <?php namespace app\index\model; use think\Model; class User extends Model { public function profile()