所以我有这个查询运行一个存在的语句,但是当我去替换它时,它没有返回相同数量的值,因为“暂停审计,EIC观察”和#39; 它实际上回报较少。
代码的旧部分在注释中,新代码直接在它之后。
SELECT t.flngKey AS flngTaskKey,
t.fstrAccountType,
t.fstrTaskSource,
CASE t.fstrCategory
WHEN '' THEN ''
ELSE t.fstrTaskSource + '_CAT_' + t.fstrCategory
END AS fstrCategory,
这是旧部分
CASE
--WHEN t.fstrType = '' THEN ''
--WHEN wd.fstrWorkType = 'SUSIN1'
--AND wd.fstrOwner = ' '
--AND wd.flngworkkey = wr.flngworkkey
--AND wr.fstrAccountType <> '007'
--AND wr.fblnOpen = 1
--AND Exists
-- (SELECT 1
-- FROM tblIndicator id
-- WHERE id.fstrIndicator = 'EIWTCH'
-- AND id.flngVer=0
-- --AND fdtmCease > @pdtmRunDate
-- AND id.flngAccountKey = wd.flngAccountKey)
--THEN 'Suspended for Audit Indicator - EIC Watch For'
--ELSE t.fstrTaskSource + '_TYP_' + t.fstrType
--END AS fstrType,
这是新的
CASE
WHEN t.fstrType = '' THEN ''
WHEN wd.fstrWorkType = 'SUSIN1'
AND wd.fstrOwner = ' '
AND wd.flngworkkey = wr.flngworkkey
AND wr.fstrAccountType <> '007'
AND wr.fblnOpen = 1
AND id.fstrIndicator = 'EIWTCH'
AND id.flngVer=0
AND id.flngAccountKey = wd.flngAccountKey
THEN 'Suspended for Audit Indicator - EIC Watch For'
ELSE t.fstrTaskSource + '_TYP_' + t.fstrType
END AS fstrType,
两者的最后一部分是相同的(我知道它的冗余)
FROM tblTaskOpen t with (nolock) LEFT OUTER JOIN tblWorkDetail wd
ON t.flngKey=wd.flngWorkKey LEFT OUTER JOIN tblIndicator id
ON t.flngAccountKey=id.flngAccountKey AND id.fstrIndicator='EIWTCH' AND id.flngVer=0,
tblWorktoReturn wr with (nolock) LEFT OUTER JOIN tblReturn r with (nolock)
ON wr.flngReturnKey = r.flngReturnKey
AND r.flngVer = 0,
t2
WHERE t.fstrCategory = 'RTNCOR'
AND wr.flngWorkKey = t.flngKey
AND t.fstrCategory = t2.fstrCategory
AND t.fstrType = t2.fstrType
在任何一种情况下,我最终都将fstrIndicator设置为EIWTCH并将flngVer设置为0,这应该限制与&#34; t&#34;加入的记录数量。反正。
此EXISTS中发生的更多记录是什么?
感谢您的帮助!
答案 0 :(得分:0)
这两个查询不一样。首先,您在LEFT OUTER JOIN
和tblTaskOpen t
之间使用tblWorkDetail wd
。这将仅返回tblWorkDetail wd
符合t.flngKey=wd.flngWorkKey
的记录(以及来自tblTaskOpen t
的所有其他记录,但这里不重要)。
因此,旧查询的EXISTS
根本不会引用tblTaskOpen t
。这意味着它甚至检查tblWorkDetail wd
中最终未返回的记录是否存在。因此,对于直接检查新查询中的列的更多记录,此EXISTS
可能会返回true。