如何识别表中是否有多个记录?

时间:2014-08-28 08:49:28

标签: progress-4gl openedge

  

我有一个表订阅,占用者,地址。我需要找到多个地址和占用者可用于订阅。

     

在订阅的快速索引中我有以下详细信息

   flags   index name         st area  cnt field name
            addressoccupant     999      2  + Addressid
                                        + Occupantid

    pu    subscription       999      1 + subscriptionid
     

地址表 - addressid是主要唯一的   乘员表-Occupantid是原始的独特

     

当我查询时,我找不到订阅的任何多个地址和占用者,但我需要确保它可以有多个地址和占用者用于子文章。

请告诉我如何找到这个。

1 个答案:

答案 0 :(得分:0)

鉴于这些索引,您可以拥有任何给定addressId或occupantId的多个订阅记录。

“addressoccupant”索引不是唯一的,即使它只是在addressId和occupantId字段的组合上也是唯一的。

为防止重复,您需要为每个字段定义唯一索引。类似于“订阅”索引,但没有“主要”属性。

这样可以防止重复,但在现实世界中,人们(可能会映射到“占用者”)通常有多个地址,地址通常会有多个人居住在其中。 addressId和occupantId的组合可以合理地唯一,但您可能不乐意使各个字段唯一 - 很大程度上取决于您的应用程序和实际数据。

(如果有这样的人,你应该从这个系统的“数据架构师”那里获得帮助。)

您可以使用AMBIGUOUS关键字来确定查询是否返回多个记录:

find subscription no-lock where addressid = 34 no-error.  /* "34" is just a made up example... */
if available subscription then
  message "found one!".
 else if ambiguous subscription then
  message "more than 1 :(".
 else
  message "no records".