第一个表结构如下:
表名:      TableA
字段名称:  外企名称(pk), 所属行业  第二个表结构如下:
表名:      TableB
字段名称:  国内企业名称(pk), 所属行业第三个表结构如下:
表名:      TableC
字段名称:  外企名称(Pk),所属行业,时段一洽谈企业(索引无重复),时段二洽谈企业(索引无重复)......时段十洽谈企业(索引无重复)表一中有外商企业200家,表二中有国内企业800家
要求:为每一家外商企业安排十家不同的国内企业与之洽谈。企业类型必须一致,如果不一致则随机选取一家国内企业与之恰谈,每一家国内企业至少与外商洽谈两次,同一时间段不能同时洽谈两家外商。怎么样才能在表三中实现这个要求阿(表三中任意一个位置字段数据在表中都是唯一的) 谢谢大家帮忙解决一下吧,不一定给我代码,给我点思路也行。再次谢谢大家!

解决方案 »

  1.   

    首先说明一下:TableC设计并不合理,建议修改成(外企名称,时段标识,洽谈企业(FK
    )),其中外企名称与时段标识位组合主键(假设同一家外商同一时段只能与一家国内企业洽谈,如果
    不是这种情况,则三个字段联合作主键)。用你原来的结构,明显是从报表出发的,
    实际上在大多数情况下,根本不能输入数据。为了保证约束条件起作用,可以在该表上建立
    触发器来实现。
      

  2.   

    I agree with  zdgdh(老吴子)
    TableC ought to create the simple relation bwtween TableA and TableB, not report
      

  3.   

    你好zdgdh(老吴子):
        谢谢你的回复,如果按照你说的那种方式设计同一家国内企业很有可能在同一时段洽谈两家外国企业,这也是不允许的这又该怎么解决呢?  麻烦再帮忙看看好么 十分感谢
      

  4.   

    have a try
    select 外企名称, 所属行业, 时段一洽谈企业, 时段二洽谈企业, ... 时段十洽谈企业
      from
    (select a.外企名称 as 外企名称, 
           a.所属行业 as 所属行业, 
           b1内企业名称 as 时段一洽谈企业, 
           b2国内企业名称 as 时段二洽谈企业, 
           ...
           b10.国内企业名称 as 时段十洽谈企业
      from TableA a,
           TableB b1,
           TableB b2,
           TableB b3,
           TableB b4,
           TableB b5,
           TableB b6,
           TableB b7,
           TableB b8,
           TableB b9,
           TableB b10
     where a.所属行业 = b1.所属行业
       and a.所属行业 = b2.所属行业
       and a.所属行业 = b3.所属行业
       and a.所属行业 = b4.所属行业
       and a.所属行业 = b5.所属行业
       and a.所属行业 = b6.所属行业
       and a.所属行业 = b7.所属行业
       and a.所属行业 = b8.所属行业
       and a.所属行业 = b9.所属行业
       and a.所属行业 = b10.所属行业
       and (not b1.国内企业名称 in (b2.国内企业名称, b3.国内企业名称, b4.国内企业名称 ... so on))
       and (not b2.国内企业名称 in (b3.国内企业名称, b4.国内企业名称, b5.国内企业名称 ... so on))
       ... so on
       and (not b9.国内企业名称 in (b10.国内企业名称))
    )
    group by 外企名称, 所属行业, 时段一洽谈企业, 时段二洽谈企业, ... 时段十洽谈企业
    having count(时段一洽谈企业) < 3
       and count(时段二洽谈企业) < 3
       ...
       and count(时段十洽谈企业) < 3
      

  5.   

    To  qybao(阿宝) :
              你好,刚才我试了一下那段代码没有错误但是提示超时已过期。我用来做测试的数据量并不大,这是为什么呢?