SQL查询选择结果取决于两个值

时间:2018-05-03 11:30:17

标签: sql sql-server

我有一个问题,我在我的数据库中运行一个不存在的查询

Description       SUBMITTER
---------------------------
General worklog   U1
Scope             U1
Email-Out         U2
General worklog   U3
planning          U3

我的查询是:

SELECT chg.CHANGE_ID,
chg.USER
FROM dbc as chg
WHERE chg.USER in ('U1')
 and NOT EXISTS (SELECT logs.Description 
    from db as logs 
    WHERE 
       logs.CHANGE_ID = chg.CHANGE_ID 
       and 
       (
     (logs.DESCRIPTION LIKE 'Email-O%'
      and 
      logs.SUBMITTER in ('U1','U3')) 
      or 
      logs.DESCRIPTION like 'Scope'
    ))

我要做的是找到U1或U3没有“Email-O”的情况,或者没有范围说明。

对于我正在运行的查询,我得到的结果没有Email-O但是如果U1或U3有另一个条目,它会丢弃结果。

实际上,我正在尝试将Email-O明确地绑定到任意数量的用户,但出于某种原因,它没有按预期工作。

感谢帮助?

根据更新后的查询输出

如果我选择logs.SUBMITTER in ('U1','U3')我返回的值少于选择logs.SUBMITTER in ('U1')时的值。我相信这是因为logs.SUBMITTER值没有明确地绑定到'Email-O'的logs.DESCRIPTION值,因此U3输入的值是'planning',这是在丢弃结果。

2 个答案:

答案 0 :(得分:0)

您的问题看起来像缺少括号,请尝试此操作。

SELECT *
FROM dbc as chg
WHERE chg.USER in ('U1','U3')
 and NOT EXISTS (SELECT logs.Description 
    from db as logs 
    WHERE 
       logs.CHANGE_ID = chg.CHANGE_ID 
       and (
        ( ( logs.DESCRIPTION LIKE 'Email-O%'
            and logs.SUBMITTER in ('U1','U3')) 
         or logs.DESCRIPTION like 'Scope' )
    ))

答案 1 :(得分:0)

and NOT EXISTS ( SELECT 1 
                   from db as logs 
                  WHERE logs.CHANGE_ID = chg.CHANGE_ID 
                    and ( ( logs.DESCRIPTION LIKE 'Email-O%' and 
                            logs.SUBMITTER in (U1,U3)
                          ) 
                          or logs.DESCRIPTION like 'Scope'
                        )
               )

这是您的罪魁祸首logs.CHANGE_ID,但您不会将其包含在数据中,也不包括chg