如何保存、查询 List 类型数据

本文主要总结了在InterSystems IRIS 中如何保存、查询List类型数据

假设我们设计的对象中包含姓名,同时每个姓名下可以包含多个电话。我们可以使用下面方法进行处理。

1. 传统方式

我们可以把每一个姓名和电话放在不同列中。

Class Test.Person Extends %Persistent
{

Property Name As %String;

Property Phone As %String;

}

我们使用SQL语句插入数据:

insert into Test.Person values ('a','111-111-1111');

insert into Test.Person values ('b','222-111-1111');

insert into Test.Person values ('a','111-222-1111');

insert into Test.Person values ('c','333-111-1111');

insert into Test.Person values ('b','222-222-1111');

数据在表中是这样的:

Name Phone
a 111-111-1111
b 222-111-1111
a 111-222-1111
c 333-111-1111
b 222-222-1111

这种情况下,我们可以使用下面的sql语句将结果返回:

SELECT
   distinct %exact(Name) Name,
   LIST(phone %foreach(Name)) Phonestr
FROM test.person
Name Phonestr
a 111-111-1111,111-222-1111
b 222-111-1111,222-222-1111
c 333-111-1111

我们可以为电话号码创建索引,以提高搜索速度,如下:

Index IdxP On Phone;

使用这种方式保存list数据比较简单,当是当list数据非常多时,这种方法会使表格臃肿。

2. 保存在一个字符串字段中,使用分隔符区分

这里我们将所有电话号码保存在一个字符串字段中,每个号码之间用逗号区分

Class Test.Person2 Extends %Persistent
{

Property Name As %String;

Property PhoneStr As %String;

}

填充数据后,类似于这样

Name PhoneStr
a 111-111-1111,111-222-1111
b 222-
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值