1

我正在尝试将以下数据存储在 visible_to 是多值属性的表中。

Wall_ID Facebook_ID Visible_To
W1      F1          F2,F3,F4
W2      F2          F1
W3      F3          F1
W4      F4          F1

我正在尝试在 Oracle 上模仿 Facebook。我想找到可以查看其他墙最大数量的用户(此处:F1)。

我已经到了在 Oracle 11g 中使用 NESTED 表存储多值属性的地步。我是否必须取消嵌套表才能找到查询结果,还是有其他方法可以做到这一点?

谢谢!

4

1 回答 1

1

如果我理解您正在尝试正确执行的操作,那么这样的事情应该可以工作(请参阅SQL Fiddle):

SELECT *
FROM (
  SELECT 
    f.wall_id
  , f.facebook_id
  , COUNT(t.COLUMN_VALUE) visible_to_count
  FROM facebook_data f
  CROSS JOIN TABLE(f.visible_to) t
  GROUP BY f.wall_id, f.facebook_id
  ORDER BY visible_to_count DESC
)
WHERE ROWNUM = 1

结果

| WALL_ID | FACEBOOK_ID | VISIBLE_TO_COUNT |
--------------------------------------------
|      W1 |          F1 |                3 |

这只是展开嵌套表然后聚合,以便您可以计算值的数量。如果您可能存储重复值,或者在查询中引入基数,您可能还需要考虑将DISTINCT关键字添加到函数中。COUNT()

于 2013-02-23T12:57:54.400 回答