希望父子表查询出来所有关联的数据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"???这样的话,就会在子表中存在不存在于父表中相同键值的记录
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"???这样的话,就会在子表中存在不存在于父表中相同键值的记录
应该不会出现这个情况吧.Select * From 生产派工单明细 Where 单号 exists(Select Top 500 单号 From 生产单 Order By 日期 DESC )
“生产单.日期”是什么数据类型?应该是日期有重复值!
*/--> 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)
日期是DateTime型,
这两个表是父子表,用单号关联的
"生产单.单号"的日期在那500个范围内但--> 3、这里子查询返回的单号不一定与2返回的单号一样。
为啥? 与2相同,这个子查询里面的日期难道不在那500条范围内??
建议你执行下面的语句看看:
select *
from (Select Top 500 * From 生产单 Order By 日期 DESC) T
where 单号 = 'SHB-071205-11'
如果返回有记录,说明'SHB-071205-11'是500个单号里的一个。
1.日期不在2内, 所以A查询没有那个单号返回,就如同顶楼讲的:
Select Top 500 * From 生产单 Order By 日期 DESC
--此查询中不存在单号为"SHB-071205-11"的记录
where 单号 = 'SHB-071205-11'
那就奇怪了,你把B查询改下试试:
Select D.*
From 生产派工单明细 D join (Select Top 500 单号 From 生产单 Order By 日期 DESC) M
on D.单号=M.单号
select * from 生产派工单明细 where 单号 in (select top 500 单号 from 生产单 order by 日期 desc,单号)
Select * From 生产派工单明细 Where 单号 In (Select distinct Top 500 单号 From 生产单 Order By 日期 DESC )