希望父子表查询出来所有关联的数据A查询如下(父表):
Select Top 500 * From 生产单   Order By 日期 DESC
--此查询中不存在单号为"SHB-071205-11"的记录
B查询如下(子表):
 Select  * From 生产派工单明细  Where   单号 In (Select Top 500 单号 From 生产单 Order By 日期 DESC )
--此查询中返回了单号为"SHB-071205-11"的记录,而A查询应该存在此单号,则相同的查询语句嵌入在B查询的子查询中,应该也不会返回此单号才是注: B查询语句中的子查询,正是与A查询是一样的,应该来说,在B查询中所能查询到的记录,应该得到单号存在于A查询所返回的所有记录
既然A查询中不存在"SHB-071205-11",那么B查询中的子查询也应该不存在此单号,但为什么B查询能返回"SHB-071205-11"???这样的话,就会在子表中存在不存在于父表中相同键值的记录

解决方案 »

  1.   

    --此查询中返回了单号为"SHB-071205-11"的记录,而A查询应该存在此单号,则相同的查询语句嵌入在B查询的子查询中,应该也不会返回此单号才是 \你说错了吧 应该是A查询中没有记录"SHB-071205-11"吧?
    应该不会出现这个情况吧.Select     *   From   生产派工单明细     Where       单号   exists(Select   Top   500   单号   From   生产单   Order   By   日期   DESC   ) 
      

  2.   

    A查询中不存在那单号, 但B查询却返回了那个单号,说明B查询中的子查询返回了那个单号而B查询中的子查询语句正是全等于A, 我们称为C好了, 既然A=C , 那为什么C 有返回而 A 没有返回,这才是我的问题
      

  3.   

    /*
    “生产单.日期”是什么数据类型?应该是日期有重复值!
    */--> 1、记下这个日期
    select 日期 from 生产单 where 单号 = 'SHB-071205-11'--> 2、如果单号='SHB-071205-11'的日期在这个范围,那就很好解释。
    select top 500 * from 生产单 order by 日期 desc--> 3、这里子查询返回的单号不一定与2返回的单号一样。
    select * from 生产派工单明细 where 单号 in (select top 500 单号 from 生产单 order by 日期 desc)
      

  4.   


    日期是DateTime型,
    这两个表是父子表,用单号关联的
    "生产单.单号"的日期在那500个范围内但--> 3、这里子查询返回的单号不一定与2返回的单号一样。  
    为啥? 与2相同,这个子查询里面的日期难道不在那500条范围内??
      

  5.   

    不可能吧,你确信500个单号里没有'SHB-071205-11'?你怎么判断没有的?
    建议你执行下面的语句看看:
    select * 
    from (Select   Top   500   *   From   生产单       Order   By   日期   DESC) T
    where 单号 = 'SHB-071205-11'
    如果返回有记录,说明'SHB-071205-11'是500个单号里的一个。
      

  6.   

    上面我说错了: 1. select 日期 from 生产单 where 单号 = 'SHB-071205-11'   2. select top 500 * from 生产单 order by 日期 desc
       
    1.日期不在2内, 所以A查询没有那个单号返回,就如同顶楼讲的:
    Select   Top   500   *   From   生产单       Order   By   日期   DESC 
    --此查询中不存在单号为"SHB-071205-11"的记录 
      

  7.   

    TO: dober_0922, 我有这样测试 ,呵
      

  8.   

    问题是为啥子查询会有,这样测试有返回select * from 生产派工单明细 where 单号 in (select top 500 单号 from 生产单 order by 日期 desc)
    where   单号   =   'SHB-071205-11'       
      

  9.   

    TO:   dober_0922,   我有这样测试   ,呵----------
    那就奇怪了,你把B查询改下试试:
    Select D.*   
    From 生产派工单明细 D join (Select Top 500 单号 From 生产单 Order By 日期 DESC) M
       on D.单号=M.单号
      

  10.   

    -->Tryselect top 500 单号 from 生产单 order by 日期 desc,单号 -->加多个排序
    select * from 生产派工单明细 where 单号 in (select top 500 单号 from 生产单 order by 日期 desc,单号)
      

  11.   

    --加个distinct试试
    Select * From 生产派工单明细 Where 单号 In (Select distinct Top 500 单号 From 生产单 Order By 日期 DESC )