I wish you

今天, 你java了吗

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  17 Posts :: 19 Stories :: 8 Comments :: 0 Trackbacks
作项目碰到一个问题, 如下:

两个集合, A为 n组{a, b, c}数据的集合, 而B为m组{catID, a, b, c},
当A的全部成员都出现在B同组的集合内部是, A才是对B可用的, 例如:
A=[1][2][3]  B=[x][1][2][3]  或者 B=[x][1][2][3]
    [3][4][5],     [x][1][2][4]              [x][3][4][5], 都称A对B可用

而 如果 B=
[x][3][4][5],
                [x][1][2][3]
                [y][3][4][5]的话, 则是A对B不可用.

这样的sql, 怎么写? 想了好久, 才发现可以用小学时的数学运算解决, 通分!

 4     9     4x11     9x7      44     63       19
--- - --- = --------- -  ------- = ------ - ----- = - ----
 7     11    7x11    11x7     77     77       77


就是说, 要分别得到两个同样结构的sql集合, 现在来求差集, 假定只要1个A集合,
而B集合却有多个, 又, 假设在oracle数据库运行, 如下:

  select (catID, a, b, c) from A, (
          (select distinct catID  from B)  --取B的分组, 连接A表,得到积
    ) matrixA
  minus     --然后减去B集合
  (select (catID, a, b, c) from B)

这样, 我们就可以得到A集合不适用于哪些B集合了.


当然, 实际情况中, 可能A集合也是多个的, 假设A集合的分类ID为catIDA, B集
合的分组ID为catIDB, 那么就有:
  select (catIDA, catIDB, a, b, c) from A, (
          (select distinct catIDB from B)  --取B的分组, 连接A表,得到积
    ) matrixA
  minus     --然后减去B集合
  (select (catIDA, catIDB, a, b, c) from B,
          (select distinct catIDA from A)  --取B的分组, 连接A表,得到积
  )
这样, 我们就可以得到所有的A集合中, 哪些A集合不适用于哪些B集合了.




posted on 2006-03-03 17:15 Iwishyou 阅读(201) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: