阿荣vin 2014-04-08 03:14 采纳率: 0%
浏览 1938

在两段SQL语句中间加NOT EXISTS语句时,无法查询获得结果?

学习开发不久,现在遇到一个问题,始终不知道如何解决。
要写的SQL语句的功能是取出某几张表中的数据不含指定表中的某几行的数据;
首先我的取出整体的记录SQL语句如下:
select BSPMSuser.userName,BSPMSuser.userDepartment,BSPMSuser.userID,
userAuthority.authorityName,BSPMSuser.MemberResponsiblity,BSPMSuser.memberPosition,
BSPMSuser.MemberTitle,BSPMSuser.memberAddress,BSPMSuser.userPhoneNumber,
BSPMSuser.memberNote from BSPMSuser,userAuthority,militarySuperviseQuarterSubmissionTable,
projectMemberRelationTable where projectMemberRelationTable.projectID=22 and
projectMemberRelationTable.authorityId=userAuthority.userGroupID
and projectMemberRelationTable.systemUserID=BSPMSuser.userID
查询结果集如下:
系统管理员 设计部 admin 系统管理员 NULL NULL NULL NULL
计划制定者 指挥部 planMaker 计划制定组 NULL NULL NULL NULL
计划跟踪者 运输部 planTracer 普通用户组 NULL NULL NULL NULL
计划审批者 设计部 planApproval 计划审批组 NULL NULL NULL NULL
查询该集中的部分集SQL代码如下:
select militarySuperviseQuarterSubmissionTable.fileSubmissionPersonId from
militarySuperviseQuarterSubmissionTable,projectMemberRelationTable
where militarySuperviseQuarterSubmissionTable.fileSubmissionPersonId=projectMemberRelationTable.systemUserID
and projectMemberRelationTable.projectID= 22 and
militarySuperviseQuarterSubmissionTable.militarySuperVisorUniqueId= 2
执行结果如下:
planMaker

为何我在两段SQL语句中间加NOT EXISTS语句时,就无法查询获得结果?
合起来的SQL语句如下:
select BSPMSuser.userName,BSPMSuser.userDepartment,projectMemberRelationTable.systemUserID,
userAuthority.authorityName,BSPMSuser.MemberResponsiblity,BSPMSuser.memberPosition,
BSPMSuser.MemberTitle,BSPMSuser.memberAddress,BSPMSuser.userPhoneNumber,
BSPMSuser.memberNote from BSPMSuser,userAuthority,militarySuperviseQuarterSubmissionTable,
projectMemberRelationTable where projectMemberRelationTable.projectID=22 and
projectMemberRelationTable.authorityId=userAuthority.userGroupID
and projectMemberRelationTable.systemUserID=BSPMSuser.userID AND not exists
(select militarySuperviseQuarterSubmissionTable.fileSubmissionPersonId from
militarySuperviseQuarterSubmissionTable,projectMemberRelationTable
where militarySuperviseQuarterSubmissionTable.fileSubmissionPersonId=projectMemberRelationTable.systemUserID
and projectMemberRelationTable.projectID= 22 and
militarySuperviseQuarterSubmissionTable.militarySuperVisorUniqueId= 2)

  • 写回答

1条回答 默认 最新

  • dison_ 2014-04-10 02:22
    关注

    有几个问题要说:
    第一:你的SQL排版要清晰点啦
    第二:not EXISTS 通俗点讲,就是返回一个boolean类型 。也就是你的这个条件的意思,如果

    SELECT
        militarySuperviseQuarterSubmissionTable.fileSubmissionPersonId
    FROM
        militarySuperviseQuarterSubmissionTable,
        projectMemberRelationTable
    WHERE
        militarySuperviseQuarterSubmissionTable.fileSubmissionPersonId = projectMemberRelationTable.systemUserID
    AND projectMemberRelationTable.projectID = 22
    AND militarySuperviseQuarterSubmissionTable.militarySuperVisorUniqueId = 2
    

    这里有查询出来没有数据,条件才成立

    废话不多说,你想要的结果应该是这样的吧:

        SELECT
        BSPMSuser.userName,
        BSPMSuser.userDepartment,
        projectMemberRelationTable.systemUserID,
        userAuthority.authorityName,
        BSPMSuser.MemberResponsiblity,
        BSPMSuser.memberPosition,
        BSPMSuser.MemberTitle,
        BSPMSuser.memberAddress,
        BSPMSuser.userPhoneNumber,
        BSPMSuser.memberNote
    FROM
        BSPMSuser,
        userAuthority,
        militarySuperviseQuarterSubmissionTable,
        projectMemberRelationTable
    WHERE
        projectMemberRelationTable.projectID = 22
    AND projectMemberRelationTable.authorityId = userAuthority.userGroupID
    AND projectMemberRelationTable.systemUserID = BSPMSuser.userID
    AND NOT IN (
        SELECT
            militarySuperviseQuarterSubmissionTable.fileSubmissionPersonId
        FROM
            militarySuperviseQuarterSubmissionTable,
            projectMemberRelationTable
        WHERE
            militarySuperviseQuarterSubmissionTable.fileSubmissionPersonId = projectMemberRelationTable.systemUserID
        AND projectMemberRelationTable.projectID = 22
        AND militarySuperviseQuarterSubmissionTable.militarySuperVisorUniqueId = 2
    );
    
    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置