奇怪的SQL关联查询问题

xjjdanran 2005-11-28 03:34:29
数据库(SQL SERVER2000)中有一函数,取出未执行完的合同,返回合同ID、部门ID及客户ID,未执行完数据等等。
现有如下SQL查询的奇怪问题:

-- 查询返回一条的记录,假设部门ID为44
SELECT ordId, dptId, cusId, qt FROM FUN_unOutOrd(default, default, 1)

--可与客户表根据根据客户ID内关联时,就只有一条记录,正常:
SELECT unOutOrd.ordId, unOutOrd.cusId FROM FUN_unOutOrd(default, default) unOutOrd INNER JOIN cus ON unOutOrd.cusId = cus.cusId

--与部门表根据部门ID内关联时,却会出现多条部门ID相同但合同ID不同的记录,怎么回事?(数据库中部门ID为44的部门也是唯一的):
SELECT unOutOrd.ordId, unOutOrd.dptId FROM FUN_unOutOrd(default, default) unOutOrd INNER JOIN dpt ON unOutOrd.dptId = dpt.dptId


请问,第三条SQL查询为什么会出现这样的情况?这个问题已经困扰了我几天了,不知各位高手们有没有遇到过?谢谢。
我的SQL SERVER已打补丁Pack4。
...全文
116 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
talantlee 2005-11-29
  • 打赏
  • 举报
回复
-与部门表根据部门ID内关联时,却会出现多条部门ID相同但合同ID不同的记录,怎么回事?(数据库中部门ID为44的部门也是唯一的):
SELECT unOutOrd.ordId, unOutOrd.dptId FROM FUN_unOutOrd(default, default) unOutOrd INNER JOIN dpt ON unOutOrd.dptId = dpt.dptId

部門ID雖然唯一,但是合同ID對應的部門也是唯一麼?是否確定是"一對一"的關系
建議樓主測試一下
select dptid from FUN_unOutOrd(default, default) unOutOrd group by dptid having count(*)>1
select dptId from dpt group by dptid having count(*)>1
看看記錄集合是否為空,不為空,就表示不能為一對一的關系.
xjjdanran 2005-11-28
  • 打赏
  • 举报
回复
函数应该没有问题吧,
这个函数在没有升过级的数据库中使用正确,可在打过补丁SP3和SP4中却出现这样的问题。
难道升级之后,反而不向下兼容了?
郁闷哪!
子陌红尘 2005-11-28
  • 打赏
  • 举报
回复
这个函数并非数据库提供的函数,而是用户自己创建的,其正确性是无法得到保障的。

估计函数本身就存在问题,或者楼主对这个函数的调用中出现了问题。
xjjdanran 2005-11-28
  • 打赏
  • 举报
回复
libin_ftsafe(子陌红尘)
跟SQL Server没关系,应该是UDF自身的问题或者调用的错误。

请问,能说详细些吗?
子陌红尘 2005-11-28
  • 打赏
  • 举报
回复
跟SQL Server没关系,应该是UDF自身的问题或者调用的错误。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧