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 |