存在于 where 子句中返回不正确的结果
Posted
技术标签:
【中文标题】存在于 where 子句中返回不正确的结果【英文标题】:Exists in where clause return incorrect result 【发布时间】:2012-02-03 21:32:59 【问题描述】:请考虑这个查询:
SELECT tesd.State_Code,
tesd.City_Code,
tesd.Row_ID,
tesd.Qsno,
tesd.Total_Period,
tesd.Current_Period,
tesd.Week,
tesd.Block_No,
tesd.Family_ID,
tesd.Line_ID,
tesd.Page_ID
INTO #tmp
FROM Specification_Master tesm
INNER JOIN Specification_Details tesd
ON tesd.Master_Id = tesm.Id
WHERE tesm.[Year] = 2000
AND tesm.[Month] = 10
AND tesd.City_Code IN ('001')
我从 2 个表中查询了一些数据并将它们插入到 #tmp
中。然后我想从其他 2 个表中选择数据并检查其中一个表在 #tmp
tbale 中有值:
SELECT *
FROM tbl_Details D
INNER JOIN tbl_Master tem
ON D.ID_Master = tem.Id
WHERE D.Period <= 5
AND EXISTS (
SELECT Row_ID
FROM #tmp tm
WHERE tm.Current_Period > 1
AND tm.State_Code = tem.State_Code
AND tm.City_Code = tem.City_Code
AND tm.Qsno = tem.Qsno
)
AND D.[Status] > 2
当我运行这个查询时,我只得到了一行,但是当我将 EXISTS
更改为 NOT EXISTS
时,我得到了更多的行。我单独运行这个查询:
SELECT Row_ID
FROM #tmp tm,tbl_Master tem
WHERE tm.Current_Period > 1
AND tm.Ostan_Code = tem.State_Code
AND tm.City_Code = tem.City_Code
AND tm.Porseshname_ID = tem.Qsno
它返回 30 行。为什么Exists
会有这样的行为?
【问题讨论】:
如何分别运行第三个?那里没有定义 tem 别名。 在您的第二个查询中,我看到了与 tbl_details 的联合。只是想知道没有存在块的查询返回了多少行。 【参考方案1】:Exists 根据子查询的结果返回一个布尔值。返回 1 行还是 30 行并不重要。您检索的行数基于 select * 语句,而不是 Exists 子句。
【讨论】:
以上是关于存在于 where 子句中返回不正确的结果的主要内容,如果未能解决你的问题,请参考以下文章
Laravel - 从一个表中获取不存在于另一个表中的记录,并附加了 where 子句
如何为'where'子句中的项目返回一些默认值,这些项目在数据库表列中不匹配(不存在)