有三个表。 
t1:字段为  No,X,Y       No为Key ,string型, x、y  double 型
t2:字段为  No,S1,S2     No为Key ,string型, S1、S2  double 型, 始终 S1<S2
t3:字段为  No,Se,Hd,Cw  No为Key ,string型, Se、Hd  double 型,Cw  string型
现要查询输出:No,X,Y,Z 
条件是:1. 三个表都拥有同一个No的,并且搜索时指定 No值 LIKE 'm%'
2. 指定 Cw = '指定值'3. 要输出的  Z  值是 t2表的 SUM(S2-S1)
 
4. t2.S1>=(t3.Se-Hd) 并且 t2.S2<=t3.Se怎么写这个SQL语句?另外,有没有如何写联合查询sql的相关资料学习下???

解决方案 »

  1.   

    no是这三个表的主键吗?如果是的话,下面这个sql应该是可以的select t1.no,
           t1.x,
           t1.y,
           sum(t2.s2 - t2.s1)
    from   t1,
           t2,
           t3
    where  t1.no   = t2.no
    and    t2.no   = t3.no
    and    t3.cw   = 'inputvalue'
    and    t2.S1   >= (t3.Se - t3.Hd)
    and    t2.S2   <= t3.Se
    and    t3.no   like 'm%'
    group by t1.no,
           t1.x,
           t1.y;
      

  2.   

    用直观的理解来看:
    1。 t1是编号表 记录了 编号no, 及相关信息x,y
    2。 t3是一个米尺上的长度段,开始长度是  Se-Hd, 结束长度是Se, 这个段的名称 是 cw。
    3.  t2记录了很多的小段开始刻度是 s1,结束刻度是s2所以可以这样想象,
    t1记录了很多编号为no的米尺。
    t2记录了编号no的米尺上的很多长度段(Se-hd,se)。
    t3是很多编号no的米尺上的更小段(S1,S2)要查找编号no米尺上的同属于一个大的长度段(t3.cw)内所有小段的距离和值(t2.S2-t2.s1)
      

  3.   

    这个帖子昨天好像你也发过诶不是这个吗?http://topic.csdn.net/u/20091024/17/7788c420-9adc-4e17-a3e9-29e0feb0776a.html专门关于写联合sql的资料不是很清楚,大学教材里面应该有讲过。
      

  4.   

    那么忽略#1的答案,这个结果应该会产生大量冗余,如果只连接t1,t2还是对的,但是因为no并不是t2和t3的主键,因此在连接时会有重复记录,假设t2中no为'm11'的记录数为2,t3中no为'm11'的记录数为3,那么产生的后果是查询计算sum时重复计算了3次
      

  5.   

    select t1.sno,x,y,sum(s2 - s1) z from t1,t2,t3 where ((t2.s1 >= (t3.se -HD))and(t2.s2 <= t3.se));应该行了 我也是初学者 不知道对不对
      

  6.   

    对#1做一下调整以获得正常结果:select t1.no,
           t1.x,
           t1.y,
           sum(t2.s2 - t2.s1)
    from   t1,
           t2
    where  t1.no   = t2.no
    and    t2.S1   >= (t3.Se - t3.Hd)
    and    t2.S2   <= t3.Se
    and    t1.no   like 'm%'
    and    exists (select 1 from t3
                   where t2.no    = t1.no
                   and   t2.S1    >= (t3.Se- t3.Hd)
                   and   t3.cw    = 'inputvalue')
    group by t1.no,
           t1.x,
           t1.y;
      

  7.   

    哈哈,好多年了,大学东西忘了与昨天的帖子类似。不过内容不太一样刚刚的结果,验证了是对的谢谢 
    shiyiwan