3.6 合集与差集的混合使用

 

计算多个集合的合集和差集。

查询出现存 DVD 拷贝不到 4 类的分店:

Branch 表,存储 DVD 分店信息;DVD 表,存储 DVD 的标题及分类信息;DVDCopy 表,存储 DVD 的多张拷贝,DVD 拷贝是真正的光盘,以实体形式存放于各个分店。

Branch
BID
Street
City
DVDCopy
CopyID
DVDID
BID
Status
LastDateRented
LastDateReturned
MemberID
DVD
DVDID
Category
Title

脚本:

A
1 =connect(“db”)
2 =Branch=A1.query(“select * from Branch”)
3 =DVD=A1.query(“select * from DVD”)
4 =DVDCopy=A1.query@x(“select * from DVDCopy”)
5 =DVDCopy.switch(DVDID,DVD:DVDID; BID,Branch:BID)
6 =DVDCopy.select(STATUS!=“Miss” && LASTDATERETURNED!=null)
7 =A6.group(BID)
8 =A7.select(~.icount(DVDID.CATEGORY)<4)
9 =A8.(BID) | (Branch \ A7.(BID))

A1 连接数据源
A2 读取分店信息,并定义为 Branch 变量
A3 读取 DVD 信息,并定义为 DVD 变量
A4 读取 DVDCopy 信息,并定义为 DVDCopy 变量
A5 将 DVDCopy 的 DVDID 字段转换成 DVD 中对应的记录,BID 字段转换成 Branch 中对应的记录
A6 过滤丢失的和未归还的 DVD 拷贝
A7 对过滤后的数据按照 BID 分组
A8 选出 DVD 拷贝小于 4 类的门店
A9 缺货的门店。其中 A8.(BID) 表示 DVD 拷贝小于 4 类的门店,Branch \ A7.(BID) 表示 DVDCopy 未出现过的门店。

运行结果:

BID STREET CITY
B002 Street2 Houston
B003 Street3 LA
B004 Street4 Lincoln