首页 > 解决方案 > 4D数据库ORDA查询:使用相关记录的长度查询

问题描述

背景

我正在使用 4D 数据库 (v17.5) 并尝试查询记录。我有以下简化模式:

Customers (table)
    -CustomerID (field)
    -CompanyName (field)
    -City (field)
    -State (field)

SalesOrders (table)
    -CustomerID (field)
    -OrderTotal (field)

它们通过多对一自动关系联系在一起:

[Customers]CustomerID (O)<-------------------------(M) [SalesOrders]CustomerID
            (ParentCustomer)              (ChildSalesOrders)

我可以使用以下任一方式查询以获取一组 [SalesOrders] 记录:

ds.SalesOrders.query("OrderTotal > 500 AND ParentCustomer.State = 'New York'")
ds.Customers.query("State = 'New York' AND ChildSalesOrders.OrderTotal > 500").ChildSalesOrders

问题

有的客户根本没有订单,想找一组相关订单为零的客户,就麻烦了。

我已经完成了以下工作:

$voCustomersToCheck:=ds.Customers.query("State = 'New York')
$voCustomersWithoutOrders:=ds.Customers.newSelection()

For each($voCustomer;$voCustomersToCheck)
    If ( $voCustomer.ChildSalesOrders.length > 0 )
        $voCustomersWithoutOrders.add($voCustomer)
    End if
End for each

我想做的是:

$voCustomersWithoutOrders:=ds.Customers.query("State = 'New York' AND ChildSalesOrders.length = 0')

但是,这行不通。

问题

我想要完成的事情可能吗?

标签: 4d-databaseorda

解决方案


在 ORDA 中,您可以使用 NULL 关键字;所以解决方案是写:

$voCustomersWithoutOrders:=ds.Customers.query("State = 'New York' AND ChildSalesOrders = NULL')

推荐阅读